Avro->镶木地板-> Spark SQL

时间:2019-05-07 18:20:47

标签: apache-spark apache-spark-sql avro parquet

我有一个使用AvroParquetWriter创建镶木地板文件的Java程序。

我可以将这些文件放在S3(AWS)中。

完成此操作后,我想创建一个外部表以使用Spark SQL查询镶木地板记录。

这可能吗?我尝试过的所有实验都建议Spark在查询时无法读取由AvroParquetWriter创建的文件。

如果可能,我该怎么办?

2 个答案:

答案 0 :(得分:0)

不确定您的AvroParquetWriter,但这对我有用,因为您可以像这样通过spark sql查询镶木地板文件目录...

PATH= '.../data.parquet'
spark.sql("select * from parquet.`{}`".format(PATH)).count()

您也可以像这样创建外部表...

CREATE EXTERNAL TABLE db.table
(
C1 INT,
c2 TIMESTAMP,
c3 STRING,
etc...
)
STORED AS PARQUET LOCATION '.../data.parquet'

答案 1 :(得分:0)

技巧是在hadoop配置中设置WRITE_OLD_LIST_STRUCTURE,如下所示:

        Configuration hadoopconf = new Configuration() {{
            setBoolean(AvroWriteSupport.WRITE_OLD_LIST_STRUCTURE, false);
            this.set("fs.s3a.aws.credentials.provider", "com.amazonaws.auth.DefaultAWSCredentialsProviderChain");
        }};

        ParquetWriter<GenericRecord> writer = AvroParquetWriter.<GenericRecord>builder(path)
                .withSchema(contact_schema)
                .withConf(hadoopconf)
                .withCompressionCodec(CompressionCodecName.SNAPPY)
                .build();