ID | col1 | col2 | 那些 | 雙打 |
---|---|---|---|---|
1 | 0 | 1 | col2 | |
2 | 1 | 2 | col1 | col2 |
3 | 0 | 1 | col2 | |
4 | 1 | 1 | col1, col2 | |
5 | 2 | 2 | col1,col2 | |
6 | 0 | 1 | col2 |
我需要將包含 1 和 2 的列名分別收集到一列中。
uj5u.com熱心網友回復:
concat_ws
有一個聰明的when
條件可以做到這一點。
from pyspark.sql import functions as F
df = spark.createDataFrame(
[(1, 0, 1),
(2, 1, 2),
(3, 0, 1),
(4, 1, 1),
(5, 2, 2),
(6, 0, 1)],
['id', 'col1', 'col2']
)
df = df.select(
'*',
F.concat_ws(', ', *[F.when(F.col(c) == 1, c) for c in {'col1', 'col2'}]).alias('ones'),
F.concat_ws(', ', *[F.when(F.col(c) == 2, c) for c in {'col1', 'col2'}]).alias('twos'),
)
df.show()
# --- ---- ---- ---------- ----------
# | id|col1|col2| ones| twos|
# --- ---- ---- ---------- ----------
# | 1| 0| 1| col2| |
# | 2| 1| 2| col1| col2|
# | 3| 0| 1| col2| |
# | 4| 1| 1|col1, col2| |
# | 5| 2| 2| |col1, col2|
# | 6| 0| 1| col2| |
# --- ---- ---- ---------- ----------
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/488045.html
標籤:阿帕奇火花 pyspark apache-spark-sql 级联 多列
上一篇:如何連續計算當天和前一天的值?
下一篇:如何從二進制運算中提取位值?