Spark导出到csv不再有效

时间:2018-01-23 08:08:32

标签: csv apache-spark pyspark export-to-csv crc

我正在使用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()命令,我尝试将列类型更改为double或string,但这些都不起作用:输出总是一样的。

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

2 个答案:

答案 0 :(得分:0)

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

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

它可能对你有用。

答案 1 :(得分:0)

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