这个问题在这里已经有答案了:
将文件保存到parquet时,分区列被移到行的末尾(2个答案)
上个月关门了。
我有这样的数据,
1,IN,abc
2,US,pqr
3,UK,rst
4,IN,xyz
5,US,lmn
我正在使用spark-2.4.5(scala)在这个数据上创建一个Dataframe
val df = spark.read.format("csv").option("header","false").load("file:///home/hduser/Desktop/demo.csv").toDF("id","country","name")
现在,当我用下面的代码将数据写为Parquet文件时,
df.write.partitionBy("country").parquet("/ex_1/spark_parquet")
输出如下所示,
+---+----+-------+
| id|name|country|
+---+----+-------+
| 3| rst| UK|
| 1| abc| IN|
| 4| xyz| IN|
| 2| pqr| US|
| 5| lmn| US|
+---+----+-------+
目前,分区列位于最后一个位置,是否有任何方法可以实现以下输出(在“country”列上进行分区)
输出应为Parquet格式
+-------+----+---+
|country|name| id|
+-------+----+---+
| UK| rst| 3|
| IN| abc| 1|
| IN| xyz| 4|
| US| pqr| 2|
| US| lmn| 5|
+-------+----+---+
1条答案
按热度按时间vatpfxk51#
1-为什么分区列的位置是最后一个(spark):您可以检查chitral verma注解:将文件保存到parquet时,分区列被移动到行的末尾
2-如果要“重新排序”列,可以使用
select
:select是一个转换,因此输出的顺序将与数据集的顺序相同。