gpt4 book ai didi

pyspark - 如何制作 PySpark Row 对象的变异副本?

转载 作者:行者123 更新时间:2023-12-03 09:04:38 24 4
gpt4 key购买 nike

从 pyspark.sql 导入行

Row 对象是不可变的。它可以转换为 Python 字典,然后变异,然后返回 Row 对象。有没有办法制作可变或变异的副本,而无需转换为字典并返回行?

这是在mapPartitions 中运行的函数所需要的。

最佳答案

row.asDict()**dict 都不会保留字段的顺序。请注意,在 python 3.6+ 中,这可能会改变。请参阅PEP 468

与@hahmed 所说的类似。这会动态创建一个变异行,但其架构与传入的行相同。

from pyspark.sql import Row
from collections import OrderedDict

def copy(row, **kwargs):
d = OrderedDict(zip(row.__fields__, row)) #note this is not recursive
for key, value in kwargs.iteritems():
d[key]=value
MyRow = Row(row.__fields__)
return MyRow(*d.values())

如果您需要将数据帧转换为 RDD,然后再次将其设为 DF,这非常有用

例如。

df_schema = df.schema
rdd = df_schema.rdd.map(lambda row: copy(row, field=newvalue))
new_df = spark.createDataFrame(rdd, df_schema)

关于pyspark - 如何制作 PySpark Row 对象的变异副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47913972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com