apache-spark - 添加新的列和行
问题描述
我有 PySpark 数据框:
cust | prob
-------------------
A | 0.1
B | 0.7
C | 0.4
我想添加另一列amount
并向每个客户添加行。我的预期结果是:
cust | prob | amount
------------------------
A | 0.1 | 1000
A | 0.1 | 2000
A | 0.1 | 3000
A | 0.1 | 4000
A | 0.1 | 5000
B | 0.7 | 1000
B | 0.7 | 2000
B | 0.7 | 3000
B | 0.7 | 4000
B | 0.7 | 5000
C | 0.4 | 1000
C | 0.4 | 2000
C | 0.4 | 3000
C | 0.4 | 4000
C | 0.4 | 5000
我需要帮助来制作这个新的列和行。我的真实数据由许多列组成,因此它应该复制数据集中的原始列。
解决方案
您可以添加一个爆炸数组:
import pyspark.sql.functions as F
df2 = df.withColumn(
'amount',
F.explode(
F.array(*[F.lit(i) for i in [1000, 2000, 3000, 4000, 5000]])
)
)
或分解序列:
df2 = df.withColumn(
'amount',
F.explode(
F.sequence(F.lit(1000), F.lit(5000), F.lit(1000))
)
)
推荐阅读
- r - 计算多个组中的共享和唯一标记
- linux - 计算Linux打开文件限制?
- javascript - 有人能解释一下这个简单函数中字母“m”到底代表什么吗?
- influxdb - InfluxDB 查询带有特定附加标签的标签值
- javascript - 如何检测文本输入上的退格键更改?
- c# - 如何将大对象发布到 Web api
- node.js - 我如何告诉 Babel CLI 忽略任何带有“__”的路径?
- c# - 我可以将训练有素的模型保存在 Accord.NET 中吗
- python - 在列而不是 DataFrame 的行中表达时间序列数据
- gps - 如何从其精度中恢复 GPS 位置的空间概率分布?