为pyspark数据帧的每一行评估多个if if elif条件

时间:2017-07-25 05:42:57

标签: apache-spark pyspark spark-dataframe bigdata

我在pyspark数据框主题中需要帮助。 我有一个1000+列和100000+行的数据帧。如果有elif条件,我有10000+,在每个if else条件下,很少有全局变量增加一些值。 现在我的问题是如何才能在pyspark中实现这一点。 我读到了关于过滤器和基于条件返回行的函数,我需要检查那些10000+ if else条件并执行一些操作。

任何帮助都将不胜感激。

如果你能给出一个有很大帮助的小数据集的例子。

三江源

2 个答案:

答案 0 :(得分:0)

如果有elif条件,您可以定义一个包含所有人的函数,然后将此函数应用到DataFrame的每一行。

只需使用.rdd将DataFrame转换为普通RDD,然后使用map()功能。
例如,DF.rdd.map(lambda row: func(row))

希望它可以帮到你。

答案 1 :(得分:0)

据我了解,您只想在迭代DataFrame时更新一些全局计数器。为此,您需要:

1)定义一个或多个accumulators

ac_0 = sc.accumulator(0)
ac_1 = sc.accumulator(0)

2)定义一个函数来更新给定行的累加器,例如:

def accumulate(row):
    if row.foo:
        ac_0.add(1)
    elif row.bar:
        ac_1.add(row.baz)

3)在您的DataFrame上调用foreach

df.foreach(accumulate)

4)检查累加器值

> ac_0.value
>>> 123