#sql #scala #apache-spark #dataframe
#sql #scala #apache-искра #фрейм данных #apache-spark
Вопрос:
У меня есть фрейм данных (df) следующего вида:
----- -----
|id |items |
----- -----
| 0 | item1 |
| 1 | item2 |
----- -----
Здесь идентификатор первого столбца является int, а элементы второго столбца имеют тип struct.
Допустим, элемент выглядит так, как показано:
item1
|-a
|-b
|-c
|-d
Я хочу результирующую таблицу вида
----- -----
|id |col2 |
----- -----
| 0 | a |
| 0 | b |
| 0 | c |
| 0 | d |
| 1 | a |
| 1 | b |
| 1 | c |
| 1 | d |
----- -----
Я хочу расширить struct для каждого столбца?
Как это сделать?
Ответ №1:
Этот фрагмент кода может решить вашу проблему:
df.rdd.flatMap{row=>
val id=row.getInt(0)
val arrayOfString=row.getAs[Array[String]](1)
arrayOfString.map(value=>(id,value)
}.toDF("id","col2")
Примечание: этот код не тестировался!
Комментарии:
1. В этом случае типом столбца «элементы» является struct . Как это может быть приведено к типу array[строка]
2. Затем удалите часть array[String] и введите свое собственное значение, из которого вы хотите извлечь