Я пытаюсь прочитать файл avro с помощью DataFrame, но продолжаю получать:
org.apache.spark.sql.avro.IncompatibleSchemaException: неподдерживаемый тип 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 есть поле, определенное с помощью "type": "null". Я не создаю файлы, над которыми работаю, поэтому не могу изменить схему. Я могу читать файлы, когда использую RDD, и читать файл с помощью метода newAPIHadoopFile.
Есть ли способ прочитать файлы avro с "type": "null", используя Dataframe, или мне придется работатьс RDD?