【问题标题】:Avro -> Parquet -> Spark SQLAvro -> Parquet -> Spark SQL
【发布时间】:2019-09-25 11:05:23
【问题描述】:

我有一个使用 AvroParquetWriter 来创建 parquet 文件的 java 程序。

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

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

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

如果可能,我该怎么办?

【问题讨论】:

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


    【解决方案1】:

    不确定您的 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'
    

    【讨论】:

      【解决方案2】:

      诀窍是在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();
      

      【讨论】:

        猜你喜欢
        • 2016-11-22
        • 2015-08-30
        • 2019-01-24
        • 2015-05-11
        • 2020-01-31
        • 2017-11-08
        • 1970-01-01
        • 1970-01-01
        • 2016-09-02
        相关资源
        最近更新 更多