Выровняйте несколько кадров данных в pyspark

#pyspark #apache-spark-sql

#пыспарк #apache-spark-sql

Вопрос:

У меня есть эти 4 кадра данных spark:

 order,device,count_1 101,201,2 102,202,4  order,device,count_2 101,201,10 103,203,100  order,device,count_3 104,204,111 103,203,10  order,device,count_4 101,201,4 104,204,11  

Я хочу создать результирующий фрейм данных в виде:

 order,device,count_1,count_2,count_3,count_4 101,201,2,10,,4, 102,202,4,,,, 103,203,,100,10,, 104,204,,,111,11  

Является ли это случаем UNION or JOIN or APPEND ? Как получить конечный результирующий df?

Комментарии:

1. Можете ли вы принять ответ, если он не неверен?

Ответ №1:

Вы можете думать об UNION объединении таблиц по строкам, поэтому количество строк, скорее всего, увеличится. JOIN объединяет таблицы по столбцам. Я не совсем понимаю , что вы имеете в виду APPEND , но в данном случае вы бы хотели JOIN .

Комментарии:

1. LEFT JOIN чтобы быть точным (по умолчанию INNER JOIN )

Ответ №2:

Попробуй:

 val df1 = Seq((101,201,2), (102,202,4)).toDF("order" ,"device", "count_1") val df2 = Seq((101,201,10), (103,203,100)).toDF("order" ,"device", "count_2") val df3 = Seq((104,204,111), (103,203,10)).toDF("order" ,"device", "count_3") val df4 = Seq((101,201,4), (104,204,11)).toDF("order" ,"device", "count_4")  val df12 = df1.join(df2, Seq("order", "device"),"fullouter") df12.show(false) val df123 = df12.join(df3, Seq("order", "device"),"fullouter") df123.show(false) val df1234 = df123.join(df4, Seq("order", "device"),"fullouter") df1234.show(false)  

ВОЗВРАТ:

  ----- ------ ------- ------- ------- -------  |order|device|count_1|count_2|count_3|count_4|  ----- ------ ------- ------- ------- -------  |101 |201 |2 |10 |null |4 | |102 |202 |4 |null |null |null | |103 |203 |null |100 |10 |null | |104 |204 |null |null |111 |11 |  ----- ------ ------- ------- ------- -------   

Как вы можете видеть, комментарии ошибочны, а 1-й ответ неверен.

Сделал в Скале, должно быть легко сделать в пыспарке.