Avro -> Parquet -> Spark SQL
Avro -> Parquet -> Spark SQL
我有一个 java 程序,它使用 AvroParquetWriter 创建镶木地板文件。
我可以将这些文件放在 S3 (AWS) 中。
完成后,我想创建一个外部 table 来使用 Spark SQL 查询镶木地板记录。
这可能吗?我尝试过的所有实验都表明 Spark 在查询时无法读取 AvroParquetWriter 创建的文件。
如果可以,我必须做什么?
不确定您的 AvroParquetWriter,但这对我有用,因为您可以像这样通过 spark sql 查询镶木地板文件目录...
PATH= '.../data.parquet'
spark.sql("select * from parquet.`{}`".format(PATH)).count()
您也可以像这样创建一个外部 table ...
CREATE EXTERNAL TABLE db.table
(
C1 INT,
c2 TIMESTAMP,
c3 STRING,
etc...
)
STORED AS PARQUET LOCATION '.../data.parquet'
技巧是在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();
我有一个 java 程序,它使用 AvroParquetWriter 创建镶木地板文件。
我可以将这些文件放在 S3 (AWS) 中。
完成后,我想创建一个外部 table 来使用 Spark SQL 查询镶木地板记录。
这可能吗?我尝试过的所有实验都表明 Spark 在查询时无法读取 AvroParquetWriter 创建的文件。
如果可以,我必须做什么?
不确定您的 AvroParquetWriter,但这对我有用,因为您可以像这样通过 spark sql 查询镶木地板文件目录...
PATH= '.../data.parquet'
spark.sql("select * from parquet.`{}`".format(PATH)).count()
您也可以像这样创建一个外部 table ...
CREATE EXTERNAL TABLE db.table
(
C1 INT,
c2 TIMESTAMP,
c3 STRING,
etc...
)
STORED AS PARQUET LOCATION '.../data.parquet'
技巧是在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();