Pet*_*ter 5 python dataframe apache-spark apache-spark-sql pyspark
我有一个小的 PySpark DataFrame df:
index col1
0 1
1 3
2 4
Run Code Online (Sandbox Code Playgroud)
还有一本字典:
LOOKUP = {0: 2, 1: 5, 2: 5, 3: 4, 4: 6}
Run Code Online (Sandbox Code Playgroud)
我现在想col2向 中添加一个额外的列df,等于LOOKUP的值col1。
我的输出应该是这样的:
index col1 col2
0 1 5
1 3 4
2 4 6
Run Code Online (Sandbox Code Playgroud)
我尝试使用:
df = df.withColumn(col("col2"), LOOKUP[col("col1")])
Run Code Online (Sandbox Code Playgroud)
但这给了我错误,以及使用expr.
如何在 PySpark 中实现这一点?
您可以使用map从字典创建的列lookup:
from itertools import chain
from pyspark.sql import functions as F
lookup = {0: 2, 1: 5, 2: 5, 3: 4, 4: 6}
lookup_map = F.create_map(*[F.lit(x) for x in chain(*lookup.items())])
df1 = df.withColumn("col2", lookup_map[F.col("col1")])
df1.show()
#+-----+----+----+
#|index|col1|col2|
#+-----+----+----+
#| 0| 1| 5|
#| 1| 3| 4|
#| 2| 4| 6|
#+-----+----+----+
Run Code Online (Sandbox Code Playgroud)
lookup_df另一种方法是从字典创建一个然后与您的数据框连接
| 归档时间: |
|
| 查看次数: |
6190 次 |
| 最近记录: |