Как я могу расширить массив в Dataframe в Scala/Spark
Я использовал пакет Databricks spark-xml для чтения XML-файла в Spark. Файл имеет следующую структуру данных:
<lib>
<element>
<genre>Thriller</genre>
<dates>
<date>2000-10-01</date>
<date>2020-10-01</date>
</dates>
</element>
<element>
<genre>SciFi</genre>
<dates>
<date>2015-10-01</date>
</dates>
</element>
</lib>
После загрузки данных я получаю фрейм данных, который выглядит следующим образом:
root
|-- genre: string (nullable = true)
|-- publish_dates: struct (nullable = true)
| |-- publish_date: array (nullable = true)
| | |-- element: string (containsNull = true)
И "шоу" дает следующий результат:
gerne | dates
Th... | [WrappedArray(20...
Можно ли получить этот результат в виде:
gerne | date
Th... | 2000-...
Th... | 2020-...
Sci.. | 2015-...
Я уже попробовал:
val rdd = df.select("genre", "dates").rdd.map(row => (row(0), row(1))).flatMapValues(_.toString)
а также
val rdd = df.select("genre", "dates").rdd.map(row => (row(0), Array(row(1)).toList)).flatMap {
case (label, list) => {
list.map( (_, label))
}
}
а также
val rdd = df.select("genre", "dates").withColumn("genre", explode($"dates"))
Но ничто не дает мне правильный результат, на самом деле последняя версия не работает вообще, но я сделал это через Google.
Любая помощь или советы будут оценены.
1 ответ
Решение
Вы упомянули свой schema
быть
root
|-- genre: string (nullable = true)
|-- publish_dates: struct (nullable = true)
| |-- publish_date: array (nullable = true)
| | |-- element: string (containsNull = true)
Что говорит о том, что ваш dataframe
быть
+--------+--------------------------------------+
|genre |publish_dates |
+--------+--------------------------------------+
|thriller|[WrappedArray(2000-10-01, 2020-10-01)]|
+--------+--------------------------------------+
Если это так, то следующие explode
Функция должна дать вам желаемый результат
val finaldf = df.select("genre", "publish_dates").withColumn("publish_dates", explode(col("publish_dates.publish_date")))
finaldf.show(false)
Чей выход
+--------+-------------+
|genre |publish_dates|
+--------+-------------+
|thriller|2000-10-01 |
|thriller|2020-10-01 |
+--------+-------------+