apache-spark - 如何在 Pyspark 中将 1000 万条记录的列转换为 20000 条记录的列?
问题描述
正如您在图像中看到的,我们有一个数据框,其中一列包含 1000 万个值。我们的目的是重塑这个数据框,并获得一个将 1000 万个值除以 20000 个值的列。有什么方法可以在 Pyspark 中执行此操作?
https://i.stack.imgur.com/FvZKf.png
接下来,我添加一个图像,您可以在其中看到我想要实现的目标。该图显示了输入值(我们所在的点)和输出值(我们想要实现的结果)的示例。
https://i.stack.imgur.com/6gJHg.png
我还有一个疑问,下一步是将列转换为行。
解决方案
这是一种可能的方法(我已经在图像中生成了表单的数据,可以通过调整输入参数来切换确切的大小generate_data
):
from pyspark.sql import functions as f
from pyspark.sql import Window
def generate_data(size=10000, colsize=200):
# generate data with a partition marker every colsize rows
# to mark where the next column begins
data = (sc.parallelize(np.random.rand(size).tolist())
.zipWithIndex()
.toDF(schema=['value', 'rownum'])
.withColumn('colnum',(f.col('rownum')/colsize).cast('integer')))
# generate a row number within column
win = Window.partitionBy('colnum').orderBy('rownum')
data = data.withColumn('col_rownum', f.rank().over(win))
return data
df = generate_data(size=10010)
# now pivot to get columns
pivoted = (df.groupby('col_rownum')
.pivot('colnum')
.max('value')
.orderBy('col_rownum'))
pivoted.select(pivoted.columns[1:])
推荐阅读
- laravel - 将 [type] 添加到可填充属性以允许在将类名插入表时出现质量分配错误
- java - SQL 服务器突然挂起 - 所有数据库连接都处于活动状态但没有响应 - SQL Server 2016
- reactjs - 你可以从 Next.js 中的 getStaticPaths() 传递非字符串对象吗?
- java - 使用地图时的编码字符串
- python-3.x - 如何获取存储库中的所有提交以及相应的分支名称?
- c# - 如何从您单击的链接按钮中获取字符串?
- proxy - 企业代理背后的开发空间
- kubernetes - Kubernetes中的VPA和HPA(Auto Scaling)可以一起使用吗?
- matlab - 如何错过 pcolor 图中的矩阵元素?
- algorithm - 在两个单元格之间找到网格空间的算法