Как сгладить (или взорвать) данные вместе со строкой в ​​кадре данных на основе данных столбца? - PullRequest
0 голосов
/ 01 июля 2018

Фрейм данных должен взорваться на основе столбца SPC. Ниже приведен пример

Мой входной фрейм данных.

ID Name Level SPC Rating salry                                                     
23 sam     3  HBS  3.5    4000                
43 Nair 4     KSTk    4   5000           
56 Rom  5     MNC    3    3000

Мой вывод должен быть:

ID Name level SPC Rating Salary                                                    
23 sam   3    H    3.5    4000    
23 sam   3    B    3.5    4000        
23 sam   3    S    3.5    4000      
43 Nair  4    K    4      5000      
43 Nair  4    S    4      5000      
43 Nair  4    T    4      5000     
43 Nair  4    k    4      5000  

Как я могу решить эту проблему в Scala или Java-коде?

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Попробуйте метод flatMap .

Пример (не проверял, компилируется ли он):

val output = input.flatMap(row =>
    row.SPC.toList.map(ch =>
        new MyRow(row.ID, row.Name, row.level, ch, row.Rating, row.Salaray))
0 голосов
/ 01 июля 2018

Если у вас есть фрейм данных / набор данных как

+---+----+-----+----+------+------+
|ID |Name|Level|SPC |Rating|salary|
+---+----+-----+----+------+------+
|23 |sam |3    |HBS |3.5   |4000  |
|43 |Nair|4    |KSTk|4.0   |5000  |
|56 |Rom |5    |MNC |3.0   |3000  |
+---+----+-----+----+------+------+

, затем вы можете написать функцию udf для преобразования значений строки столбца SPC в массив каждого символа в виде строки, а затем использовать функцию explode в качестве

import org.apache.spark.sql.functions._
def flattenStringUdf = udf((spc: String) => spc.toList.map(_.toString))

df.withColumn("SPC", explode(flattenStringUdf(col("SPC")))).show(false)

, который должен дать вам

+---+----+-----+---+------+------+
|ID |Name|Level|SPC|Rating|salary|
+---+----+-----+---+------+------+
|23 |sam |3    |H  |3.5   |4000  |
|23 |sam |3    |B  |3.5   |4000  |
|23 |sam |3    |S  |3.5   |4000  |
|43 |Nair|4    |K  |4.0   |5000  |
|43 |Nair|4    |S  |4.0   |5000  |
|43 |Nair|4    |T  |4.0   |5000  |
|43 |Nair|4    |k  |4.0   |5000  |
|56 |Rom |5    |M  |3.0   |3000  |
|56 |Rom |5    |N  |3.0   |3000  |
|56 |Rom |5    |C  |3.0   |3000  |
+---+----+-----+---+------+------+

Надеюсь, ответ полезен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...