J'ai lu un fichier AVRO dans spark RDD et je dois le convertir en un fichier de données SQL. comment je fais ça.
C'est ce que j'ai fait jusqu'à présent.
import org.Apache.avro.generic.GenericRecord
import org.Apache.avro.mapred.{AvroInputFormat, AvroWrapper}
import org.Apache.hadoop.io.NullWritable
val path = "hdfs://dds-nameservice/user/ghagh/"
val avroRDD = sc.hadoopFile[AvroWrapper[GenericRecord], NullWritable, AvroInputFormat[GenericRecord]](path)
Quand je fais:
avro.take(1)
Je reviens
res1: Array[(org.Apache.avro.mapred.AvroWrapper[org.Apache.avro.generic.GenericRecord], org.Apache.hadoop.io.NullWritable)] = Array(({"column1": "value1", "column2": "value2", "column3": value3,...
Comment est-ce que je convertis ceci en un dataframe de SparkSQL?
J'utilise Spark 1.6
Quelqu'un peut-il me dire s'il existe une solution facile à ce problème?
Pour DataFrame
j'irais avec Avro source de données directement :
Inclure spark-avro dans la liste des paquets. Pour la dernière version, utilisez:
com.databricks:spark-avro_2.11:3.2.0
Chargez le fichier:
val df = spark.read
.format("com.databricks.spark.avro")
.load(path)
Si votre projet est maven, ajoutez la dernière dépendance ci-dessous dans pom.xml.
<dependency>
<groupId>com.databricks</groupId>
<artifactId>spark-avro_2.11</artifactId>
<version>4.0.0</version>
</dependency>
Après cela, vous pouvez lire le fichier avro
comme ci-dessous
val df=spark.read.format("com.databricks.spark.avro").option("header","true").load("C:\\Users\\alice\\inputs\\sample_data.avro")