Столбец Pyspark concat в массив и разнесение значений - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь переместить столбец в строки. Сначала объедините столбцы в массив. Второй шаг - разделите столбец массива.

Функция разнесения не работает ..

>>> filteredPaths1.select(   array ( concat( col("v1.id"),lit(","),col("v2.id"),lit(",") ,col("v2.id") )).alias("test")     ).printSchema()
root
 |-- test: array (nullable = false)
 |    |-- element: string (containsNull = true)

Значения в столбце массива -

>>> filteredPaths1.select(   array ( concat( col("v1.id"),lit(","),col("v2.id"),lit(",") ,col("v2.id") )).alias("test")     ).show(10,False)
+--------------------------------------------------------------+                ]
|test                                                          |
+--------------------------------------------------------------+
|[Sorter_SAMPLE_CUSTOMER,Join_Source_Target,Join_Source_Target]|
+--------------------------------------------------------------+

Однако при попытке взорвать столбец массива он не создает новые строки, а просто дает тот же результат -

>>> filteredPaths1.select(   explode (array ( concat( col("v1.id"),lit(","),col("v2.id"),lit(",") ,col("v2.id") )).alias("test") )    ).show(10,False)
+------------------------------------------------------------+                  ]
|col                                                         |
+------------------------------------------------------------+
|Sorter_SAMPLE_CUSTOMER,Join_Source_Target,Join_Source_Target|
+------------------------------------------------------------+

По какой-либо причине Explode не работает?

1 Ответ

1 голос
/ 20 июня 2020

Из-за того, что вы используете array(concat(..)) означает массив из одного значения и, взорвав его, вы получите только одну строку, то есть такое же значение.

Используйте split вместо array

filteredPaths1.select(explode(split(concat_ws(",",col("v1.id"),col("v2.id"),col("v2.id")),",")).alias("test"))
...