迭代pyspark数据框中的列,而不为单个列创建不同的数据框

时间:2017-03-10 11:28:30

标签: python-2.7 pyspark spark-dataframe

我们如何遍历数据框中的列以在同一数据帧中单独执行某些或所有列的计算,而不为单个列创建不同的数据框(类似于map迭代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合并并删除旧列。

此代码的问题是,当map迭代列表时,它不会在spark上分发。我想以分布式的方式想要这样的东西。

P.S.-我不想使用rdd。

提前致谢!

1 个答案:

答案 0 :(得分:0)

使用带有spark udf的数据框上的列,而不是使用map。 在udf中,定义函数并以这种方式执行逻辑:

  1. 您没有使用不可并行化的列表
  2. udf及其内部的功能将传递给每个并行运行的激励器。
相关问题