如何通过在现有列上应用函数将列添加到pyspark DataFrame中?

时间:2019-04-02 21:52:54

标签: python pyspark

我想将合并功能应用于DataFrame的一列中的数据,并将结果存储在添加到DataFrame的新列中。

理想情况下,我想确保可以在递归中使用任何自定义python函数,因为列中的行可以是数组,并且我想对每个数组中的每个元素进行装箱。除了最终对数据进行装箱之外,我还想执行其他操作。

我知道我可以使用withColumn(...)添加一个新列,但是我不知道如何正确放置为该新列生成数据的函数。

编辑: similar question解决了部分问题-创建用户定义的函数。 但是,它似乎不接受列表作为参数:

def put_number_in_bin(number, bins):
    if is_number(number):
        number = float(number)
        for i, b in enumerate(bins):
            if number <= b:
                bin_selected = str(i)
                break
        return bin_selected
    else:
        return str("NULL")

binning_udf = udf(lambda (x, bins): put_number_in_bin(x, bins), StringType())

bins = [0.0, 182.0, 309.4000000000001, 540.0, 846.0, 2714.0, 5872.561999999998, 10655.993999999999, 20183.062, 46350.379999999976, 4852207.7]

df_augment = df_all.withColumn("newCol1", binning_udf(df_all.total_cost, bins))

结果是此错误:

TypeError: Invalid argument, not a string or column: [0.0, 182.0, 309.4000000000001, 540.0, 846.0, 2714.0, 5872.561999999998, 10655.993999999999, 20183.062, 46350.379999999976, 4852207.7] of type <type 'list'>. For column literals, use 'lit', 'array', 'struct' or 'create_map' function.

0 个答案:

没有答案