pyspark - 如何在 Pyspark 中优化我的 Reduce 函数
问题描述
我正在尝试在数据框中的键之间创建映射。
我在 pyspark 数据框中有一个列 R_ID、V1、V2、V3 列。
我需要输出数据框来为我提供这些列之间的映射。我的结果应该是
我已经使用 Reduce 完成了这项工作,但是在使用大数据进行测试时遇到了性能问题
有人可以帮我弄这个吗?
解决方案
您可以分别选择每一v
列,然后将它们合并在一起
输入
df = spark.createDataFrame([
('r1', 'v1', 'v2', 'v3'),
('r2', 'v4', 'v5', None),
('r3', None, 'v6', None),
], ['r', 'c1', 'c2', 'c3'])
# +---+----+---+----+
# | r| c1| c2| c3|
# +---+----+---+----+
# | r1| v1| v2| v3|
# | r2| v4| v5|null|
# | r3|null| v6|null|
# +---+----+---+----+
**v
分别选择每一列
from pyspark.sql import functions as F
df1 = df.select('c1', 'r').where(F.col('c1').isNotNull())
# +---+---+
# | c1| r|
# +---+---+
# | v1| r1|
# | v4| r2|
# +---+---+
df2 = df.select('c2', 'r').where(F.col('c2').isNotNull())
# +---+---+
# | c2| r|
# +---+---+
# | v2| r1|
# | v5| r2|
# | v6| r3|
# +---+---+
df3 = df.select('c3', 'r').where(F.col('c3').isNotNull())
# +---+---+
# | c3| r|
# +---+---+
# | v3| r1|
# +---+---+
然后将它们结合在一起
df1.union(df2).union(df3)
# +---+---+
# | c1| r|
# +---+---+
# | v1| r1|
# | v4| r2|
# | v2| r1|
# | v5| r2|
# | v6| r3|
# | v3| r1|
# +---+---+
推荐阅读
- javascript - Firebase 存储随机返回存储/取消
- git - 如何撤消我在 Git 中的最后一次提交并存储这些更改?
- java - 如何阻止 cron 作业创建 attach_pid 文件?
- javascript - 未捕获的类型错误:即使在删除所有节点和 svg 后,也无法在数字“1”上创建属性“vx”得到此错误
- elasticsearch - 将 Logstash 输入发送到多个输出
- python - 如何在python中从字典中替换NaN
- swift - 快速更新领域中的一系列项目
- php - 使用 file_put_content 上传图像数据时松散的 Mime 类型
- python - Google Colaboratory 本地主机中没有 tensorflow
- sql - PostgreSQL 获取带有物品的订单