相关疑难解决方法(0)

如何在PySpark中使用Scala UDF?

我希望能够将Scala函数用作PySpark中的UDF

package com.test

object ScalaPySparkUDFs extends Serializable {
    def testFunction1(x: Int): Int = { x * 2 }
    def testUDFFunction1 = udf { x: Int => testFunction1(x) }
} 
Run Code Online (Sandbox Code Playgroud)

我可以testFunction1在PySpark 中访问它并返回值:

functions = sc._jvm.com.test.ScalaPySparkUDFs 
functions.testFunction1(10)
Run Code Online (Sandbox Code Playgroud)

我想要做的就是将此函数用作UDF,最好是在withColumn通话中使用:

row = Row("Value")
numbers = sc.parallelize([1,2,3,4]).map(row).toDF()
numbers.withColumn("Result", testUDFFunction1(numbers['Value']))
Run Code Online (Sandbox Code Playgroud)

我认为这里有一个很有前途的方法: Spark:如何用Scala或Java用户定义函数映射Python?

但是,在对其中的代码进行更改时,可以改为使用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)))
Run Code Online (Sandbox Code Playgroud)

我得到:

 AttributeError: 'JavaMember' object has no attribute 'apply' 
Run Code Online (Sandbox Code Playgroud)

我不明白这是因为我相信testUDFFunction1有申请方法吗?

我不想使用在这里找到的类型的表达式:将 UDF从Scala注册到SqlContext,以便在PySpark中使用

任何有关如何使这项工作的建议,将不胜感激!

python scala apache-spark apache-spark-sql pyspark

6
推荐指数
2
解决办法
3331
查看次数

来自Spark Streaming的RestAPI服务调用

我有一个用例,从卡夫卡读取消息后,我需要从Spark Streaming调用RESTAPI进行一些计算,然后将结果保存回HDFS和第三方应用程序。

我对此毫不怀疑:

  • 我们如何直接从Spark流中调用RESTAPI。
  • 如何使用流式批处理时间管理RESTAPI超时。

rest scala apache-spark spark-streaming

3
推荐指数
1
解决办法
8245
查看次数