2017-06-16 25 views
0

后来编辑2:我发现问题,我通常应该删除这个问题,因为我犯的错误与我所要求的无关,问题的根源在其他地方。 虽然有一些知识宝库,但是除非社区决定放弃它,否则我会放弃它。编辑:所以,不知道为什么这并没有提前给我,解决方案是使用dataframe.na.drop(“所有”)摆脱所有的空行。我仍然想知道他们为什么会出现。其他过滤器不会创建这些空行。将Spark数据帧保存为csv有空行

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

我定义了一个数据帧为一过滤另一个数据帧基于若干conditions.Then我将其保存为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/") 

的问题是,在输出“份”文件(一个或多个)包含空行。任何ideea为什么以及如何删除它们?

谢谢。

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

+0

列1和列3是否在源('dataframe_raw')中为空?这可以解释它 –

+0

比较你使用'dataframe.show'写的数据框。看看差异在哪里,是否有缺失行的特定模式。用您的发现更新问题。 – philantrovert

+0

第1列和第3列不是空的。我不确定为什么我会得到完全空行,如果它们是(DF中还有其他列不是空的),你能描述一下吗? – UrVal

回答

0

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

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

第二种选择是添加括号。

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

其实我已经在使用括号,忘了在原文中加入它们。我尝试改变操作=!=结果的顺序是一样的。 – UrVal

+0

如果添加圆括号并尝试使用'=!=',那么您可以显示操作'dataframe_raw.show()'的结果,但是很难说出了什么问题。 –

+0

不知道如何在这里帮助你。我无法发布数据框的内容,如果屏蔽数据,它可能会变得无关紧要。如果有帮助的话:我加入2个类似的数据框,昨天和今天的结果在同一个过程中,使用2个常用键,然后比较新的4列和旧的4列,保留差异。比较的列是long类型和字符串(日期确切地说是字符串)。此外,连接是外部的,我保留今天结果中的结果,但不会出现在昨天的结果中。 – UrVal

相关问题