Próbuję obracać kolumny iskier DF na rzędy, takie jak poniższy przykład.

scala> df.show()
+----+--------------------+
|year|               String|
+----+--------------------+
|ina|List(Apple, 136, Train ...)...|
|inb|List(Orange, 4.36, car ...)...|
|ina|List(Apple,34, plane ...)...|
+----+--------------------+

I utwórz wyjście DF jako:

+----+-------------+-------------+
|year|key|String|
+----+-------------+-------------+
|ina|Apple       |136  |
|inb|Car         |4.36 |
|ina|Orange      |34   |

Jak mogę uzyskać pożądany wyjście? używając wybuchu?

Wielkie dzięki!

1
basigow 23 listopad 2020, 13:26

1 odpowiedź

Najlepsza odpowiedź

Jeśli rozważasz kolumnę swojej wartości jako JSON:

val mappingSchema = MapType(StringType, FloatType)
   
originalDF.withColumn("map", from_json($"value", mappingSchema)).select($"year", explode($"map")).show()

Daje:

+----+------+---------+
|year|   key|    value|
+----+------+---------+
|2020| Apple|1064.3667|
|2020|   Car|   1434.2|
|2020|Orange| 104.3667|
|2020| Plane|    145.2|
|2020| Apple|  1064.37|
|2020| Train|    134.2|
+----+------+---------+

Zmień nazwę kolumn, jeśli jest to konieczne

1
EmiCareOfCell44 23 listopad 2020, 11:09