我有一个使用AvroParquetWriter创建镶木地板文件的Java程序。
我可以将这些文件放在S3(AWS)中。
完成此操作后,我想创建一个外部表以使用Spark SQL查询镶木地板记录。
这可能吗?我尝试过的所有实验都建议Spark在查询时无法读取由AvroParquetWriter创建的文件。
如果可能,我该怎么办?
答案 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();