从外部客户端数据库获取值以作为Spark数据框中的键的列值

时间:2019-04-30 05:17:55

标签: scala apache-spark dataframe

我想从另一个基于Java的数据库资源中获取给定列值的值。

我遵循了以下过程

//sample method 
object testObject extends Serializable {
def method1(key: String) = Database[String,String] {
return dbdetails 
}

val data : Database[String,String] = method1.testObject(x)

val getUdf = udf((value: String) => data.get(value))

val resultingDF = df.withColumn("test", lit(getUdf(col("value"))))

说,如果数据库中的get返回字符串值“ abc”,我希望它存储在数据框中。但是,在按如下所示调用UDF时会引发错误。

Caused by: java.lang.RuntimeException: org.apache.spark.SparkException: Task not serializable.

我尝试使用可扩展序列化,但是错误仍然存​​在。

1 个答案:

答案 0 :(得分:0)

尝试将您的方法定义为对象:

object testObject extends Serializable {
val method1(key: String) = Database[String,String] {
return dbdetails 
}