将Spark Dataframe保存到csv具有空行

时间:2017-06-16 10:03:31

标签: apache-spark apache-spark-sql spark-dataframe

LATER EDIT 2:我发现了问题,我通常应该删除这个问题,因为我犯的错误与我所问的无关,问题的根源在于其他地方。 虽然有一些知识,但我会留下它,除非社区决定将其删除。

LATER EDIT:所以,不知道为什么这对我来说不早,解决方案是使用dataframe.na.drop(“all”)来摆脱所有空行。我仍然想知道为什么他们出现。其他过滤器不会创建这些空行。

我找不到任何答案或提示,为什么会发生这种情况。我怀疑过滤器是罪魁祸首,但不确定是否如此,为什么以及如何解决它。

我将数据帧定义为基于几个条件过滤的另一个数据帧。然后我将其保存为csv:

var dataframe = dataframe_raw.filter($"column1" !== $"column2" || $"column3"!==$"column4").drop($"column2").drop($"column4")
dataframe.write.mode("overwrite").option("header","true").csv("hdfs:///path/to/file/")

问题是输出“part”文件包含空行。任何想法为什么以及如何删除它们?

谢谢。

注意:还尝试了coalesce(1),它有助于只保存一个文件,但也包含空行。

1 个答案:

答案 0 :(得分:0)

我认为问题与Scala中的运算符优先级有关。要解决此问题,请尝试将!==更改为===

dataframe_raw.filter($"column1" =!= $"column2" || $"column3"=!=$"column4")

第二个选项是添加括号。

dataframe_raw.filter(($"column1" !== $"column2") || ($"column3"!==$"column4"))