У меня есть файл JSON, содержащий много полей. Я прочитал файл с помощью набора данных Spark в java.
Spark версии 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 - Пытался, но не смог определить определяемый пользователем тип данных. Мне не удалось зарегистрировать UDF с этим пользовательским типом UDDatatype. мне нужны здесь пользовательские типы данных?
3 - и главный вопрос, как я могу преобразовать String в Row?
Часть журнала скопирована ниже:
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)
Мы будем благодарны за вашу помощь.