Spark DataFrame 实例一个新列
Spark DataFrame instance a new column
我有一个数据框,我在第一个列上使用 groupByKey 来获得一个字符串数组,我想在我的数据框的新列中实例化一个新对象。
+-----------+-----------------------------------------------------------+
|name |Thing |
+-----------+-----------------------------------------------------------+
|253 |[a, b, c, d, e] |
|095 |[f, g] |
|282 |[h, i, j] |
+-----------+-----------------------------------------------------------+
我要实例化的对象具有以下结构:
public MyObject(String name,
String[] Thing)
我定义了一个案例类来使用 DataFrame:
case class Myclass(name: String, Thing: Array[String])
为了实现这个目标,我使用了一个 UDF 函数:
def myFunction(name : String, Thing: Array[String]): MyObject= {
return new MyObject(name , Thing)
}
我的代码是这样的:
var my_df = my_old_df.map(line=>(line(0).asInstanceOf[String],line(1).asInstanceOf[String]))
.groupByKey()
val my_next_df : DataFrame= my_df.map(line => Myclass(line._1.toString,line._2.toArray)).toDF()
val myudf= sqlContext.udf.register("myudf", myFunction _)
val my_df_problem = my_next_df.withColumn("Object", myudf($"name", $"Thing"))
我有实例化问题:java.lang.UnsupportedOperationException:不支持类型 Library.class 的模式
看来 UDF 必须 return MyClass
类型。
val myudf= sqlContext.udf
.register("myudf", (name : String, thing: Array[String]) => new MyClass(name , thing))
我有一个数据框,我在第一个列上使用 groupByKey 来获得一个字符串数组,我想在我的数据框的新列中实例化一个新对象。
+-----------+-----------------------------------------------------------+
|name |Thing |
+-----------+-----------------------------------------------------------+
|253 |[a, b, c, d, e] |
|095 |[f, g] |
|282 |[h, i, j] |
+-----------+-----------------------------------------------------------+
我要实例化的对象具有以下结构:
public MyObject(String name,
String[] Thing)
我定义了一个案例类来使用 DataFrame:
case class Myclass(name: String, Thing: Array[String])
为了实现这个目标,我使用了一个 UDF 函数:
def myFunction(name : String, Thing: Array[String]): MyObject= {
return new MyObject(name , Thing)
}
我的代码是这样的:
var my_df = my_old_df.map(line=>(line(0).asInstanceOf[String],line(1).asInstanceOf[String]))
.groupByKey()
val my_next_df : DataFrame= my_df.map(line => Myclass(line._1.toString,line._2.toArray)).toDF()
val myudf= sqlContext.udf.register("myudf", myFunction _)
val my_df_problem = my_next_df.withColumn("Object", myudf($"name", $"Thing"))
我有实例化问题:java.lang.UnsupportedOperationException:不支持类型 Library.class 的模式
看来 UDF 必须 return MyClass
类型。
val myudf= sqlContext.udf
.register("myudf", (name : String, thing: Array[String]) => new MyClass(name , thing))