将现有函数用作UDF以修改Spark Dataframe列时出错

时间:2016-05-24 08:57:52

标签: python numpy flask pyspark spark-dataframe

我的数据框包含一个包含纯文本的字符串类型的列,我想使用<div ng-controller="loginController" class="container-fluid"> Login Page </div> (或pyspark.sql.functions.udf?)来修改此列。

我在OSX 10.11.4上使用Python 2.7,Pyspark 1.6.1和Flask 0.10.1。

当我使用lambda表达式时似乎工作正常:

pyspark.sql.functions.UserDefinedFunction

一旦我尝试将lambda表达式移动到命名函数中:

@spark.route('/')
def run():
    df = ... # my dataframe
    myUDF = udf(lambda r: len(r),  IntegerType())
    df = df.withColumn('new_'+column, myUDF(df[column]))
    return render_template('index.html', data=df.take(1000))

我收到以下错误:

def my_function(x):
    return len(x)

@spark.route('/')
def run():
    df = ... # my dataframe
    myUDF = udf(my_function,  IntegerType())
    df = df.withColumn('new_'+column, myUDF(df[column]))
    return render_template('index.html', data=df.take(1000))

已安装Numpy。删除mllib导入并没有解决问题。

1 个答案:

答案 0 :(得分:0)

如果你在'run'函数体内声明'my_function'的所有主体,它通常会起作用。 否则我还没有找到如何像你的情况那样调用外部函数。