1
我有一個數據框,我groupByKey在我的第一個列有一個字符串數組,我想實例在我的數據框的新列中的新對象。Spark DataFrame實例新列
+-----------+-----------------------------------------------------------+
|name |Thing |
+-----------+-----------------------------------------------------------+
|253 |[a, b, c, d, e] |
|095 |[f, g] |
|282 |[h, i, j] |
+-----------+-----------------------------------------------------------+
我的目標,我會實例有這樣的結構:
public MyObject(String name,
String[] Thing)
我定義了一個caseclass使用數據框:
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"))
我有instanciation問題:java.lang.UnsupportedOperationException:不支持架構類型Library.class
不應該你的UDF讀取'...:MyClass'不是'...:MyObject'嗎?無論如何,你已經完成了第二行代碼。你根本不需要第3和第4行。 –