Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 年月日分割后的火花df分割_Python_Dataframe_Apache Spark - Fatal编程技术网

Python 年月日分割后的火花df分割

Python 年月日分割后的火花df分割,python,dataframe,apache-spark,Python,Dataframe,Apache Spark,S3承载一个非常大的压缩文件(20gb压缩->200gb未压缩)。 我想读入这个文件(不幸的是在单核上解压),转换一些sql列,然后以S3\u path/year=2020/month=01/day=01/[files 1-200]格式输出到S3 整个文件将包含来自同一日期的数据。这让我相信,我不应该使用partitionBy('year','month','day')而是应该将“year={year}/month={month}/day={day}/”附加到s3路径,因为目前spark一次只向

S3承载一个非常大的压缩文件(20gb压缩->200gb未压缩)。 我想读入这个文件(不幸的是在单核上解压),转换一些sql列,然后以
S3\u path/year=2020/month=01/day=01/[files 1-200]格式输出到S3

整个文件将包含来自同一日期的数据。这让我相信,我不应该使用
partitionBy('year','month','day')
而是应该将
“year={year}/month={month}/day={day}/”
附加到s3路径,因为目前spark一次只向s3写入一个文件(每个文件大小为1gb)。我的想法正确吗

以下是我目前正在做的事情:

df = df\
    .withColumn('year', lit(datetime_object.year))\
    .withColumn('month', lit(datetime_object.month))\
    .withColumn('day', lit(datetime_object.day))

df\
    .write\
    .partitionBy('year','month','day')\
    .parquet(s3_dest_path, mode='overwrite')
我在想:

df = spark.read.format('json')\
    .load(s3_file, schema=StructType.fromJson(my_schema))\
    .repartition(200)
# currently takes a long time decompressing the 20gb s3_file.json.gz

# transform
df.write\
    .parquet(s3_dest_path + 'year={}/month={}/day={}/'.format(year,month,day))

您可能遇到了这样的问题:spark首先将数据写入某个临时目录,然后才将其提交到最终位置。在HDFS中,这是通过重命名完成的。但是S3不支持重命名,而是完全复制数据(仅使用一个执行器)。有关此主题的更多信息,请参见本文示例:


常见的解决方法是写入hdfs,然后使用distcp将分布式文件从hdfs复制到s3

您可能会遇到这样的问题:spark首先将数据写入某个临时目录,然后才将其提交到最终位置。在HDFS中,这是通过重命名完成的。但是S3不支持重命名,而是完全复制数据(仅使用一个执行器)。有关此主题的更多信息,请参见本文示例:


常见的解决方法是向hdfs写入数据,然后使用distcp将分发的数据从hdfs复制到s3

我看不出这样做有什么害处。我看不出这样做有什么害处。我不断听到人们说s3怎么可能。现在是2020年,这看起来很奇怪。我完全同意。我的知识来自2018年。。。因此,如果从那以后发生了什么事情,我很高兴得到更新。我不断听到人们说S3是如何实现的。现在是2020年,这看起来很奇怪。我完全同意。我的知识来自2018年。。。因此,如果从那以后发生了什么事情,我很高兴得到最新消息