我有一個包含許多字段的JSON文件。我在java中使用spark的Dataset讀取文件。在Spark數據集中使用custome UDF withColumn <Row>; java.lang.String不能轉換爲org.apache.spark.sql.Row
星火版本2.2.0
JAVA JDK 1.8.0_121
下面是代碼。
SparkSession spark = SparkSession
.builder()
.appName("Java Spark SQL basic example")
.config("spark.some.config.option", "some-value")
.master("local")
.getOrCreate();
Dataset<Row> df = spark.read().json("jsonfile.json");
我想使用withColumn函數與自定義的UDF添加一個新的列。
UDF1 someudf = new UDF1<Row,String>(){
public String call(Row fin) throws Exception{
String some_str = fin.getAs("String");
return some_str;
}
};
spark.udf().register("some_udf", someudf, DataTypes.StringType);
df.withColumn("procs", callUDF("some_udf", col("columnx"))).show();
當我運行上面的代碼時出現轉換錯誤。 java.lang.String中不能被強制轉換爲org.apache.spark.sql.Row
問題:
1 - 正在讀入行的數據集的唯一選擇?我可以將df轉換爲字符串的df。但我無法選擇字段。
2 - 試過但未能定義用戶定義的數據類型。我無法使用此自定義UDDatatype註冊UDF。我需要用戶定義的數據類型嗎?
3 - 和主要問題,我怎麼能從字符串投到行?日誌
以下部分被複制:
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.spark.sql.Row
at Risks.readcsv$1.call(readcsv.java:1)
at org.apache.spark.sql.UDFRegistration$$anonfun$27.apply(UDFRegistration.scala:512)
... 16 more
Caused by: org.apache.spark.SparkException: Failed to execute user defined function($anonfun$27: (string) => string)
您的幫助將不勝感激。
太棒了,我需要仔細閱讀文檔。非常感謝 – valearner