我想在S3上的Parquet中保留我的日志数据的副本,以进行临时分析 . 我主要通过Spark与Parquet合作,并且似乎只提供通过 SQLContext.parquetFile()
和 SQLContext.saveAsParquetFile()
读取和写入整个表的操作 .
有没有办法将数据添加到现有的Parquet表而不编写全新的副本,特别是当它存储在S3中时?
我知道我可以为更新创建单独的表,在Spark中我可以在查询时形成Spark中的相应DataFrame的联合,但我对它的可扩展性有疑问 .
如果需要,我可以使用除Spark之外的其他东西 .
3 回答
附加到镶木地板文件的方法是使用
SaveMode.Append
单独创建它们后不需要联合
DataFrames
,只需将与查询相关的所有路径提供给parquetFile(paths)
并获取一个DataFrame
. 正如阅读镶木地板文件的签名:sqlContext.parquetFile(paths: String*)
暗示 .在引擎盖下,在
newParquetRelation2
中,您提供的所有文件夹中的所有.parquet
文件以及所有_common_medata
和_metadata
将被填充到single list并同等地考虑 .Amazon S3不支持追加 . S3是CDN(内容分发网络),并不意味着支持写密集型操作 . 它针对并行读取进行了优化 .
执行此操作的唯一方法是将数据分割为多个文件,或将EC2用作文件服务器并仅在一个地方附加 .