python - 如何映射列以在 spark sql 数据框中创建新列?
问题描述
在 python 和 pandas 中,我可以像这样创建一个新列:
使用 pandas 数据框中的两列来创建一个字典。
dict1 = dict(zip(data["id"], data["duration"]))
然后我可以应用这个字典在第二个数据框中创建一个新列。
df['id_duration'] = df['id'].map(lambda x: dict1[x] if x in dict1.keys() else -1)
如果我有一个数据框(有两列:和)和一个数据框(有一个列) id_duration
,如何在 spark sql 数据框中创建一个新列?data
id
duration
df
id
解决方案
使用字典会很可惜,因为您需要将整个数据帧收集data
到驱动程序上,这对性能非常不利,并可能导致 OOM 错误。
您可以简单地在两个数据帧之间执行左外连接,并na.fill
使用-1
.
data = spark.createDataFrame([(1, 10), (2, 20), (3, 30)], ['id', 'duration'])
df = spark.createDataFrame([(1, 2), (3, 4)], ['id', 'x'])
df\
.join(data.withColumnRenamed("duration", "id_duration"), ['id'], 'left')\
.na.fill(-1).show()
+---+---+-----------+
| id| x|id_duration|
+---+---+-----------+
| 5| 6| -1|
| 1| 2| 10|
| 3| 4| 30|
+---+---+-----------+
推荐阅读
- postgresql - Datadog:PostgreSQL custom_metrics 返回单行
- c++ - C++ Trie 中的浮点异常
- python - 将多个文件从一台主机传输到另一台主机
- regsvr32 - 尝试注册 ISDone.dll 和 unarc.dll 时出现 Regsvr 错误消息
- python - 使用 seaborn 缩放图形的字体,同时保留 matplotlib 的样式
- charts - Chart.js 堆积条形图 - 按值对条形中的值进行排序
- android - Volley StringRequest 仅获得 200 状态码但没有响应正文
- c# - Mock Setup方法在有params参数时抛出异常
- gradle - Gradle 输出缺少生成的 META-INF 文件
- python - 熊猫在几分钟内生成 date_range