Spark 导出到 csv 不再有效

Spark export to csv no longer works

我正在使用 Spark 2.2.0,并且我有以下 DF:

testSchema = t.StructType(
    [t.StructField('a', t.FloatType(), True),
     t.StructField('b', t.FloatType(), True),
     t.StructField('c', t.FloatType(), True),
     t.StructField('d', t.FloatType(), True),
     t.StructField('e', t.FloatType(), True)]
)

test_df = (
    sqlc
    .createDataFrame([(1.0, 2.0, 3.0, 0.0, 0.0),
                      (2.0, 0.0, -1.0, -3.0, 1.0),
                      (0.0, 1.0, 0.0, 0.0, -2.0)],
                     schema = testSchema)
)

test_df.show()

+---+---+----+----+----+
|  a|  b|   c|   d|   e|
+---+---+----+----+----+
|1.0|2.0| 3.0| 0.0| 0.0|
|2.0|0.0|-1.0|-3.0| 1.0|
|0.0|1.0| 0.0| 0.0|-2.0|
+---+---+----+----+----+

我想将其导出为 csv 文件。以下代码一直运行良好:

(
    test_df
    .repartition(1)
    .write
    .format('csv')
    .options(header=True, delimiter=';')
    .save('/opt/hitl/test.csv')
)

...到现在为止。现在突然好像不行了

我之前获得的是一个名为test.csv的文件夹,其中有一个名为_temporary的文件夹,然后是一个名为0的文件夹,其中包含另外两个文件夹:_temporary再次(空)和 task_20171124154417_1077_m_000000(每次不同的代码)。后者包含我的名为 part-00000-01bc3cc4-988f-4f2f-9edd-89e0db3d6f94-c000.csv 的 csv 文件和一个 crc 文件 .part-00000-01bc3cc4-988f-4f2f-9edd-89e0db3d6f94-c000.csv.crc.

我现在得到的是一个名为test.csv的文件夹,但是在这个文件夹中我只有两个文件:一个名为._SUCCESS.crc的crc文件和一个没有扩展名的_SUCCESS文件。没有别的。

我试图通过删除重新分区和分隔符来修改上面的导出代码,我尝试使用 test_df.write.csv() 命令,我尝试将列类型更改为双精度或字符串,但是 none 这些有效:输出总是相同的。

有什么建议吗? 非常感谢。

尝试使用 pandas,您可以使用 .toPandas() 本机方法转换 Spark 数据帧:

pdf = test_df.toPandas()
pdf.to_csv('/opt/hitl/test.csv')

它可能对你有用。

已解决:比我想象的要简单。导出工作正常,但导出的 csv 文件位于与我预期不同的文件夹中。由于某种原因,导出过程现在在两个不同的位置创建了两个文件夹:一个包含 csv 文件,另一个仅包含 _SUCCESS 文件。