Spark Scala Dataframe: как преобразовать столбцы в строки?

#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