我想在S3上的Parquet中保留我的日志数据的副本,以进行临时分析。我主要通过Spark与Parquet合作,而且似乎只提供通过SQLContext.parquetFile()
和SQLContext.saveAsParquetFile()
来读写整个表格的操作。
有没有办法将数据添加到现有的Parquet表中 没有写一个全新的副本 特别是当它存储在S3?
时我知道我可以为更新创建单独的表,在Spark中我可以在查询时形成Spark中对应DataFrame的联合,但我对此的可扩展性有疑问。
如果需要,我可以使用Spark以外的东西。
答案 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用作文件服务器并仅在一个地方附加。