Я оставляю свой вопрос ниже, поскольку он был изначально отправлен для будущих разработчиков, которые столкнутся с этой проблемой. Проблема была решена после того, как я перешел на Spark2.0 - т.е. результат был таким, как я ожидал, без каких-либо изменений в исходном коде. Похоже, некоторая разница в реализации в версии 1.6, которую я использовал вначале. вход - просто фильтрация входа). Входные данные иногда имеют нулевые значения в последних столбцах строк.
Когда я использую разделитель "," в выходных данных есть запятые. Например,
val1, val2, val3,val4,val5
val1, val2, val3,,
, но если я использую табуляцию (\ t) в качестве разделителя, вывод не будет включать конечные табуляции. Например (я пишу здесь TAB, где появляется \ t):
val1 TAB val2 TAB val3 TAB val4 TAB val5
val1 TAB val2 TAB val3 <= **here I expected two more tabs (as with the comma delimiter)**
Я также пробовал другие разделители и видел, что, когда разделитель представляет собой символ пробела (например, символ ''), конечные разделители не на выходе. Если я использую другой видимый разделитель (например, букву 'z'), он работает нормально, как и разделитель запятой, и у меня есть конечные разделители.
Я думал, что это может быть связано с параметрами ignoreLeadingWhiteSpace и ignoreTrailingWhiteSpace, но их установка оба на false при написании тоже не помогли.
Мой код выглядит так:
val df = sqlContext.read.format("com.databricks.spark.csv").option("delimiter", "\t").load(params.inputPathS3)
df_filtered = df.filter(...)
df_filtered.write.format("com.databricks.spark.csv").option("delimiter", "\t").save(outputPath)
Я тоже пробовал (как писал выше):
df_filtered.write.format("com.databricks.spark.csv").option("delimiter", "\t").option("ignoreLeadingWhiteSpace", "false").option("ignoreTrailingWhiteSpace", "false").save(outputPath)