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
文件。
我正在使用 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
文件。