#scala #apache-spark #apache-spark-sql
#скала #apache-искра #apache-spark-sql
Вопрос:
Существует ли какой-нибудь эффективный способ транспонирования столбцов в строки для большого фрейма данных в Spark Scala?
val inputDF = Seq(("100","A", "10", "B", null),
("101","A", "20", "B", 30)
).toDF("ID", "Type1", "Value1", "Type2", "Value2")
Я хочу перенести его в фрейм данных, как показано ниже.
val OutDF = Seq(("100","A", "10"),
("100","B", "null),
("101", "A", "20"),
("101", "B", "30")
).toDF("ID", "TypeID", "Value")
Фрейм данных большой, содержит около 1 ГБ данных. Я использую spark 2.4.x. Есть какие-нибудь комментарии по поводу того, как сделать это эффективным способом? Большое спасибо!
Ответ №1:
Вы можете создать профсоюз:
val outputDF = inputDF.select("ID","Type1","Value1")
.unionAll(inputDF.select("ID","Type2","Value2"))
.toDF("ID","Type","Value") // change column names