/ / От Scala до Java 1.8 - java, scala, lambda, bigdata, apache-искра

От Скала до Java 1.8 - java, scala, lambda, bigdata, apache-spark

Бих искал да напиша програма Spark, която анализираcsv лог файл, разделя думите чрез разделител ";" и създава обект, чиито стойности на атрибут са думи, разположени на конкретни позиции. Кодът ще изглежда така в Scala, но имам проблеми при превода на Java 1.8 (бих искал да използвам ламбда изразите в Java).

val file = sc.textFile("hdfs:/../vrLogs.csv")
class VREvent(val eventTimestamp: String, val deviceID: String, val eventType: String, val itemGroupName: String)
val vrEvents = file.map(_.split(";")).filter(_.size == 32).map(a => new VREvent(a(0), a(1), a(6), a(13)))

Не съм сигурен как да преведа тази част на Java: .map(a => new VREvent(a(0), a(1), a(6), a(13))).

Опитах това (без филтърната част):

JavaRDD<String> records = lines.flatMap(s -> Arrays.asList(s.split(";"))).map(a -> new CDREvent(a[0], a[1], a[6], a[13]));

Отговори:

3 за отговор № 1

Ако приемем, че lines е Stream<String>:

List<CDREvent> events =
lines
.map(s -> s.split(";"))
.filter(a -> a.length == 32)
.map(a -> new CDREvent(a[0], a[1], a[6], a[13]))
.collect(Collectors.toList());

Съпоставете всеки ред с a String[], филтрирайте всички масиви, които не са с дължина 32, картографирайте всеки String[] до a CDREvent, и ги съберете в нов списък.