Нужно произвести две записи из одной записи в спарк Java - PullRequest
0 голосов
/ 06 июля 2019

У меня есть файл, который содержит записи ниже.

cardno1,cardno2,age,name,address,ssn
cardno1,       ,age,name,address,ssn
cardno2,       ,age,name,address,ssn

Мне нужно проанализировать этот файл, и мне нужно произвести 2 записи, когда на вход поступают оба cardno1 и cardno2.пример: - cardno1, cardno2, возраст, имя, адрес, ssn

In this case two records are needed as below

cardno1, возраст, имя, адрес, ssn

cardno2, возраст, имя, адрес, ssn

How this can be achieved using spark java.
Need help to solve this.


1 Ответ

0 голосов
/ 07 июля 2019

В Scala - не JAVA Spark, не очень хорошая вещь imho - так что вы можете конвертировать, используя RDD и DF.Использование DF может стать лучше для каждой строки.Не так сложно конвертировать, но в ноутбуках Java не распространена.

Ввод

cardno1,cardno2,age,name,address,ssn
cardno1,,age,name,address,ssn
cardno2,,age,name,address,ssn
cardno3,,age,name,address,ssn
cardno4,cardno5,age2,name2,address2,ssn2
cardno4,,age2,name2,address2,ssn2
cardno5,,age2,name2,address2,ssn2

Код

val filesRDD = sc.textFile("/FileStore/tables/so.txt",5) 
val linesRDD = filesRDD.map(_.split(",")).filter(c => !"".equalsIgnoreCase(c(1).trim)).map(entries=> (entries(0),entries(1),entries(2),entries(3),entries(4),entries(5)))
val linesRDD2_first = linesRDD.map { case (v1, v2, v3, v4, v5, v6) => (v1, v3, v4, v5, v6) }
val linesRDD2_second = linesRDD.map { case (v1, v2, v3, v4, v5, v6) => (v2, v3, v4, v5, v6) }
val df1 = linesRDD2_first.toDF()
val df2 = linesRDD2_second.toDF()
val df3 = df1.union(df2).toDF("cardno", "age", "name", "address", "ssn")
df3.show(false)

Вывод в формате Dataframe

+-------+----+-----+--------+----+
|cardno |age |name |address |ssn |
+-------+----+-----+--------+----+
|cardno1|age |name |address |ssn |
|cardno4|age2|name2|address2|ssn2|
|cardno2|age |name |address |ssn |
|cardno5|age2|name2|address2|ssn2|
+-------+----+-----+--------+----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...