我们如何通过数据框中的列迭代列在同一dataframe中分别对某些或所有列进行计算,而无需对单个列进行不同的数据框(与映射类似于映射,通过映射通过行通过行迭代,在行中通过行迭代。RDD和一行执行计算,而无需为每行制作不同的RDD)。我达到了下面给出的解决方案。
l = list of column names
df = dataframe in pyspark
def plusone(df_column):
return (df_column + 1)
df1 = df.select(map(lambda x: (plusone(getattribute(df,l[x]))) if x ==0 else getattribute(df,l[x]), range(len(l))))
print df1.show()
以这种方式,我获得了一个数据框,其中具有我想要的特定列中的更改,而不是为列创建不同的数据框,然后与DF合并并删除了旧列。
此代码的问题是,它不会在列表上迭代时在Spark上分发。我想要以分布式的方式这样的东西。
P.S.-我不想使用RDD。
预先感谢!
而不是使用映射,而是与Spark UDF上的数据框架一起使用。在UDF内部,以这种方式定义功能并执行逻辑:
- 您不使用列表,而不是平行的
- UDF以及内部功能将传递给每个罪犯,该罪犯将并行运行。