【发布时间】:2017-07-03 22:37:41
【问题描述】:
我在多节点环境(一个主节点和两个从节点)上的 apache spark 上运行代码,在该环境中我正在操作数据帧,然后对其执行逻辑回归。在这两者之间,我还写出了临时转换的文件。我目睹了一个特殊的观察结果(是的,我已经仔细检查和三次检查了),我无法解释并想确认这可能是因为我的代码还是可能有其他因素在起作用。
我有一个类似
的数据框df
uid rank text
a 1 najn
b 2 dak
c 1 kksa
c 3 alkw
b 1 bdsj
c 2 asma
我用下面的代码排序
sdf = df.orderBy("uid", "rank")
sdf.show()
uid rank text
a 1 najn
b 1 bdsj
b 2 dak
c 1 kksa
c 2 asma
c 3 alkw
并使用将转换后的df写入HDFS
sdf.repartition(1)
.write.format("com.databricks.spark.csv")
.option("header", "true")
.save("/someLocation")
现在当我再次尝试查看数据时,它似乎失去了排序
sdf.show()
uid rank text
a 1 najn
c 2 asma
b 2 dak
c 1 kksa
c 3 alkw
b 1 bdsj
当我跳过编写代码时,它工作正常。
如果这可能是一个有效的案例,任何人都有任何指针,我们可以做一些事情来解决它。
附:我尝试了编写代码的各种变体,增加分区数量,完全删除分区并将其保存为其他格式。
【问题讨论】:
-
repartition打乱所有数据删除和先前的顺序。否则,应以像这样的简单输出格式保留顺序。
标签: apache-spark dataframe hdfs apache-spark-sql spark-dataframe