在S3中逐步向Parquet表添加数据

时间:2015-05-13 07:05:52

标签: amazon-s3 apache-spark apache-spark-sql parquet

我想在S3上的Parquet中保留我的日志数据的副本,以进行临时分析。我主要通过Spark与Parquet合作,而且似乎只提供通过SQLContext.parquetFile()SQLContext.saveAsParquetFile()来读写整个表格的操作。

有没有办法将数据添加到现有的Parquet表中 没有写一个全新的副本 特别是当它存储在S3?

我知道我可以为更新创建单独的表,在Spark中我可以在查询时形成Spark中对应DataFrame的联合,但我对此的可扩展性有疑问。

如果需要,我可以使用Spark以外的东西。

3 个答案:

答案 0 :(得分:3)

附加到镶木地板文件的方法是使用SaveMode.Append

`yourDataFrame.write.mode(SaveMode.Append).parquet("/your/file")`

答案 1 :(得分:2)

在单独创建DataFrames之后,您不需要联合parquetFile(paths),只需将与查询相关的所有路径提供给DataFrame,然后获取一个sqlContext.parquetFile(paths: String*)。就像阅读镶木地板文件的签名一样:newParquetRelation2表明。

.parquet内,您提供的所有文件夹中的所有_common_medata个文件以及所有_metadata和{{1}}都将填入single list同等重视。

答案 2 :(得分:0)

Amazon S3不支持追加。 S3是CDN(内容分发网络),并不意味着支持写密集型操作。它针对并行读取进行了优化。

执行此操作的唯一方法是将数据分割为多个文件,或将EC2用作文件服务器并仅在一个地方附加。