Преобразование фрейма данных в spark scala

#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] и введите свое собственное значение, из которого вы хотите извлечь