У меня есть такой код
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
? Спасибо
спасибо, но мне нужно написать это более удобным в случае, если столбцы списка могут измениться.
@VõHoàngAnh: Обновлено