Я пытаюсь прочитать файл avro с помощью DataFrame, но продолжаю получать:
org.apache.spark.sql.avro.IncompileSchemaException: неподдерживаемый тип NULL
Поскольку я собираюсь развернуть его на Dataproc, я использую Spark 2.4.0, но то же самое произошло, когда я попробовал другие версии.
Ниже приведены мои зависимости:
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
Мой основной класс:
public static void main(String[] args) {
SparkConf sparkConf = new SparkConf()
.setAppName("Example");
SparkSession spark = SparkSession
.builder()
.appName("Java Spark SQL basic example")
.getOrCreate();
Dataset<Row> rowDataset = spark.read().format("avro").load("avro_file");
}
Запуск команды:
spark-submit --packages org.apache.spark:spark-avro_2.11:2.4.0 --master local[*] --class MainClass my-spak-app.jar
Проведя множество тестов, я пришел к выводу, что это происходит потому, что в моей схеме avro есть поле, определенное с «типом»: «null». Я не создаю файлы, над которыми работаю, поэтому не могу изменить схему. Я могу читать файлы, когда использую RDD, и читаю файл с помощью метода newAPIHadoopFile.
Есть ли способ читать файлы avro с «типом»: «null» с помощью Dataframe или мне придется работать с RDD?