Apache spark Spark partitionBy |按列值而不是列名保存={value}
我正在使用scala和spark,我的spark版本是2.4.3 我的dataframe看起来像这样,还有其他一些列我没有放进去,也不相关Apache spark Spark partitionBy |按列值而不是列名保存={value},apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我正在使用scala和spark,我的spark版本是2.4.3 我的dataframe看起来像这样,还有其他一些列我没有放进去,也不相关 +-----------+---------+---------+ |ts_utc_yyyy|ts_utc_MM|ts_utc_dd| +-----------+---------+---------+ |2019 |01 |20 | |2019 |01 |13 | |2019
+-----------+---------+---------+
|ts_utc_yyyy|ts_utc_MM|ts_utc_dd|
+-----------+---------+---------+
|2019 |01 |20 |
|2019 |01 |13 |
|2019 |01 |12 |
|2019 |01 |19 |
|2019 |01 |19 |
+-----------+---------+---------+
基本上,我想以一种带扣的格式存储数据,如
2019年1月12日数据
2019年1月13日/数据
2019年1月19日数据
2019年1月20日/数据
我正在使用下面的代码片段
但问题是它与列名称一起存储,如下所示
ts_utc_yyyy=2019/ts_utc_MM=01/ts_utc_dd=12/数据
ts_utc_yyyy=2019/ts_utc_MM=01/ts_utc_dd=13/数据
ts_utc_yyyy=2019/ts_utc_MM=01/ts_utc_dd=19/数据
ts_utc_yyyy=2019/ts_utc_MM=01/ts_utc_dd=20/数据
如果文件夹名称中没有列名,如何保存
谢谢。这是预期的行为。Spark使用配置单元分区,因此它使用此约定进行编写,该约定支持分区发现、筛选和修剪。简而言之,它通过确保读取的数据量最小来优化查询
Spark并不是为您所需要的输出而设计的。解决此问题的最简单方法是使用一个下游任务,通过等号拆分来重命名目录。这是预期的行为。Spark使用配置单元分区,因此它使用此约定进行编写,该约定支持分区发现、筛选和修剪。简而言之,它通过确保读取的数据量最小来优化查询
Spark并不是为您所需要的输出而设计的。解决此问题的最简单方法是使用一个下游任务,通过等号拆分来重命名目录。我希望您尝试在HDFS上存储。是吗?我正在使用谷歌存储服务在生产中保存文件。在开发机器文件系统(Mac)中也可以看到同样的行为,我希望您尝试存储在HDFS上。是吗?我正在使用谷歌存储服务在生产中保存文件。在开发机器文件系统(Mac)中也可以看到同样的行为
df.write
.partitionBy("ts_utc_yyyy","ts_utc_MM","ts_utc_dd")
.format("csv")
.save(outputPath)