Pyspark UDF - 类型错误:'module'对象不可调用

3

我正在尝试运行以下代码,这是基于我在网上找到的一些教程:

import pandas as pd
from pyspark.sql import SparkSession
from pyspark.sql import functions
from pyspark.sql import udf
df_pd = pd.DataFrame(
data={'integers': [1, 2, 3],
 'floats': [-1.0, 0.5, 2.7],
 'integer_arrays': [[1, 2], [3, 4, 5], [6, 7, 8, 9]]}
)

df = spark.createDataFrame(df_pd)
df.show()

def square(x):
    return x**2
from pyspark.sql.types import IntegerType
square_udf_int = udf(lambda z: square(z), IntegerType())

但是当我运行最后一行时,我会收到以下错误:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable

我正在使用Hadoop 2.7上的Spark 2.3.3。

谢谢


你是如何调用这个UDF函数的?能告诉我吗? - Fasty
@RAMSHANKERG,我不太明白你的意思,在错误之前的最后一行中,正如我的消息所说,我正在尝试将我的函数转换为UDF,这是我运行时出现错误的所有代码。square_udf_int = udf(lambda z: square(z), IntegerType()) - Alejandro A
你难道不应该通过调用square_udf_int函数向z传递一些值吗? - Fasty
@RAMSHANKERG 是的,当我调用UDF时会出错;但是在声明它时代码就失败了。 - Alejandro A
请包含完整的回溯信息,显示导致错误的确切代码。在某个地方,你有一个不应该存在的 () - pault
你的udf是一个模块,你不能直接调用它。你还期望发生什么以及为什么?你有查看相关文档吗? - Stop harming Monica
2个回答

10

看起来你正在从 pyspark.sql 导入,而应该是从 pyspark.sql.functions 导入 比如...

import pyspark.sql.functions as F

     udf_fun = F.udf (lambda..., Type())

-5

看起来你是以非Pythonic的方式调用了UDF。在Python中,缩进是至关重要的。我做了以下更改,它正常工作了。

import pandas as pd
from pyspark.sql import SparkSession
from pyspark.sql import functions
from pyspark.sql import udf
df_pd = pd.DataFrame(
data={'integers': [1, 2, 3],
 'floats': [-1.0, 0.5, 2.7],
 'integer_arrays': [[1, 2], [3, 4, 5], [6, 7, 8, 9]]}
)

df = spark.createDataFrame(df_pd)
df.show()

def square(x):
    return x**2

def call_udf():
  from pyspark.sql.types import IntegerType
  square_udf_int = udf(lambda z: square(z), IntegerType())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接