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),它有助于只保存一个文件,但也包含空行。
答案 0 :(得分:0)
我认为问题与Scala中的运算符优先级有关。要解决此问题,请尝试将!==
更改为===
。
dataframe_raw.filter($"column1" =!= $"column2" || $"column3"=!=$"column4")
第二个选项是添加括号。
dataframe_raw.filter(($"column1" !== $"column2") || ($"column3"!==$"column4"))