Как объединить список в кадре данных в искре

avatar
Cobe9696
9 августа 2021 в 05:56
178
1
1

У меня есть такой код

columns = ("language","users_count","status")
data = (("Java",None,"1"), ("Python", "100000","2"), ("Scala", "3000","3"))
rdd = spark.sparkContext.parallelize(data)
df = rdd.toDF(columns)
df.withColumn('concat', regexp_replace(concat( coalesce(*columns)), " ", "")).show()

результат:

+--------+-----------+------+------+
|language|users_count|status|concat|
+--------+-----------+------+------+
|    Java|       null|     1|  Java|
|  Python|     100000|     2|Python|
|   Scala|       3000|     3| Scala|
+--------+-----------+------+------+

Если я хочу, чтобы столбец concat был Java1, мне нужно закодировать:

df.withColumn('concat', regexp_replace(concat(
coalesce('language',lit('')),
coalesce('users_count', lit('')),
coalesce('status', lit('')) ), " ", "")).show()```

Выглядит так:

+--------+-----------+------+-------------+
|language|users_count|status|       concat|
+--------+-----------+------+-------------+
|    Java|       null|     1|        Java1|
|  Python|     100000|     2|Python1000002|
|   Scala|       3000|     3|   Scala30003|
+--------+-----------+------+-------------+

Может ли кто-нибудь помочь мне исправить coalesce(*columns), чтобы мне не нужно было записывать все объединения для каждого столбца в columns? Спасибо

Источник

Ответы (1)

avatar
Bala
9 августа 2021 в 06:49
1

Использовать concat_ws

>>> df.show()
+--------+-----------+------+
|language|users_count|status|
+--------+-----------+------+
|    Java|       null|     1|
|  Python|     100000|     2|
|   Scala|       3000|     3|
+--------+-----------+------+

>>> df.withColumn('concat', concat_ws("",*columns)).show()
+--------+-----------+------+-------------+
|language|users_count|status|       concat|
+--------+-----------+------+-------------+
|    Java|       null|     1|        Java1|
|  Python|     100000|     2|Python1000002|
|   Scala|       3000|     3|   Scala30003|
+--------+-----------+------+-------------+
Cobe9696
9 августа 2021 в 06:55
0

спасибо, но мне нужно написать это более удобным в случае, если столбцы списка могут измениться.

Bala
9 августа 2021 в 06:56
0

@VõHoàngAnh: Обновлено