Я пытаюсь преобразовать avro-файлы, сгенерированные в паркет, используя spark.
Вот некоторые из опций, которые я пробовал: читать avro-файл в контексте spark sql -> записывать во временную таблицу ->читать все записи во фрейме данных и записывать в файл паркета.
Код ниже:
Dataset<Row> df = sqlContext.read().format("com.databricks.spark.avro")
.load(inputDirectory);
df.show();
df.printSchema();
df.createOrReplaceTempView("tempview");
StructType schema = df.schema();
JavaRDD rdd = df.toJavaRDD();
Dataset<Row> sqlDF = sqlContext.createDataFrame(rdd, schema);
String fileName = "parquet_files";
//Dataset<Row> sqlDF = spark.sql("SELECT * FROM tempview");
sqlDF.show();
sqlDF.schema();
sqlDF.write()
.mode(SaveMode.Overwrite)
.parquet(fileName);
Во-вторых, я попытался скопировать его в RDD, а затем попытался записать в файл.В обоих случаях у меня была одна и та же ошибка.
Caused by: java.lang.NoSuchMethodError: org.apache.parquet.column.values.ValuesReader.initFromPage(I[BI)V
at org.apache.spark.sql.execution.datasources.parquet.VectorizedColumnReader.readPageV1(VectorizedColumnReader.java:606)
at org.apache.spark.sql.execution.datasources.parquet.VectorizedColumnReader.access$000(VectorizedColumnReader.java:47)
at org.apache.spark.sql.execution.datasources.parquet.VectorizedColumnReader$1.visit(VectorizedColumnReader.java:540)
Есть идеи?