Pyspark UDF - TypeError: объект 'module' не вызывается - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь запустить следующий код, основанный на каком-то учебнике, который я нашел в Интернете:

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

Я использую spark 2.3.3 на Hadoop 2.7.

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

кажется, что вы импортируете из pyspark.sql, в то время как это должно быть pyspark.sql.functions как ...

import pyspark.sql.functions as F

     udf_fun = F.udf (lambda..., Type())
0 голосов
/ 01 марта 2019

Кажется, вы называете UDF непифоническим способом.Индендинги жизненно важны в питоне.Я сделал следующее изменение, и оно работало нормально

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())
...