我正在使用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,但这些都不起作用:输出总是一样的。
有什么建议吗? 非常感谢你。
答案 0 :(得分:0)
尝试使用pandas,您可以使用.toPandas()
本机方法转换Spark数据帧:
pdf = test_df.toPandas()
pdf.to_csv('/opt/hitl/test.csv')
它可能对你有用。
答案 1 :(得分:0)
解决了:它比我想象的要简单。导出正在运行,但导出的csv文件位于与我预期不同的文件夹中。出于某种原因,导出过程现在在两个不同的位置创建两个文件夹:一个包含csv文件,另一个包含_SUCCESS
文件。