我有一个Dataframe,我想以Parquet格式保存到hdfs。我想把它分成多列。
当我将数据写入hdfs目录本身时,只创建了其中的成功文件,但没有数据。我用 partitionOverwriteMode=dynamic
以及 overwrite
作为保存模式。当我执行代码时,路径不存在。如果我把保存模式改为 append
那就行了。我还尝试写入本地文件系统。在这种情况下,两种模式都能正常工作。如果只指定了一个分区列,那么它也可以正常工作。
关于如何使用多列分区进行覆盖,有什么想法吗?谢谢你给我小费。谢谢!
代码示例:
from pyspark.sql import SparkSession
from pyspark.conf import SparkConf
data = [
{'country': 'DE', 'fk_imported_at': '20191212', 'user_id': 15},
{'country': 'DE', 'fk_imported_at': '20191212', 'user_id': 14},
{'country': 'US', 'fk_imported_at': '20191212', 'user_id': 12},
{'country': 'US', 'fk_imported_at': '20191212', 'user_id': 13},
{'country': 'DE', 'fk_imported_at': '20191213', 'user_id': 4},
{'country': 'DE', 'fk_imported_at': '20191213', 'user_id': 2},
{'country': 'US', 'fk_imported_at': '20191213', 'user_id': 1},
]
if __name__ == '__main__':
conf = SparkConf()
conf.set('spark.sql.sources.partitionOverwriteMode', 'dynamic')
spark = (
SparkSession
.builder
.config(conf=conf)
.appName('test partitioning')
.enableHiveSupport()
.getOrCreate()
)
df = spark.createDataFrame(data)
df.show()
df.repartition(1).write.parquet('/tmp/spark_save_mode', 'overwrite', ['fk_imported_at', 'country'])
spark.stop()
我正在以客户端模式提交申请。spark版本是2.3.0。hadoop版本是2.6.0
暂无答案!
目前还没有任何答案,快来回答吧!