我希望能够在PySpark中使用Scala函数作为UDF。
我可以在PySpark中访问
我希望你能将这个函数作为UDF使用,最好在
我认为一种有前途的方法是在此处找到: Spark: How to map Python with Scala or Java User Defined Functions? 但是,当对那里找到的代码进行更改以使用
我不理解这个,因为我相信
我不想使用这里发现的类型的表达式:从Scala向SqlContext注册UDF以在PySpark中使用 如果您有任何建议如何使其工作,将不胜感激!
package com.test
object ScalaPySparkUDFs extends Serializable {
def testFunction1(x: Int): Int = { x * 2 }
def testUDFFunction1 = udf { x: Int => testFunction1(x) }
}
我可以在PySpark中访问
testFunction1
并返回值:functions = sc._jvm.com.test.ScalaPySparkUDFs
functions.testFunction1(10)
我希望你能将这个函数作为UDF使用,最好在
withColumn
调用中使用:row = Row("Value")
numbers = sc.parallelize([1,2,3,4]).map(row).toDF()
numbers.withColumn("Result", testUDFFunction1(numbers['Value']))
我认为一种有前途的方法是在此处找到: Spark: How to map Python with Scala or Java User Defined Functions? 但是,当对那里找到的代码进行更改以使用
testUDFFunction1
时:def udf_test(col):
sc = SparkContext._active_spark_context
_f = sc._jvm.com.test.ScalaPySparkUDFs.testUDFFunction1.apply
return Column(_f(_to_seq(sc, [col], _to_java_column)))
I get:
AttributeError: 'JavaMember' object has no attribute 'apply'
我不理解这个,因为我相信
testUDFFunction1
确实有一个apply方法?我不想使用这里发现的类型的表达式:从Scala向SqlContext注册UDF以在PySpark中使用 如果您有任何建议如何使其工作,将不胜感激!