Pyspark:写给csv写拼花而不是csv

时间:2017-06-29 16:23:33

标签: apache-spark pyspark spark-dataframe pyspark-sql

在下面的代码中,out.csv采用镶木地板格式。我将它作为csv文件写入时缺少什么选项?

import py4j
from pyspark import SparkConf, SparkContext
from pyspark import HiveContext as hc
import os
from pyspark.sql import SQLContext, Row

from datetime import datetime
from pyspark.sql.types import DateType,StringType
import pyspark.sql.functions as F

os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.databricks:spark-csv_2.11:1.5.0'
conf = SparkConf().setMaster("local[64]").setAppName("My App")
sc = SparkContext(conf = conf)
sqlContext = SQLContext(sc)

#read parquet file into DF
df = sqlContext.read.parquet('/path/in_parquet')

# Write to csv
df_grouped = df.groupBy('column1').agg(F.sum('column2'))
df_grouped.repartition(1).write.format("com.databricks.spark.csv").option("header", "true").save("/path/out.csv")

输出:

控制台中剩余的最后几行。另外,这是我用来运行脚本的命令:

spark-submit --master local [*] --driver-memory 12g --packages com.databricks:spark-csv_2.11:1.2.0 MyPyspark.py

$ hdfs dfs -ls /path/out.csv
Found 2 items
-rw-r--r--   3 me devs          0 2017-06-29 12:16 /path/out.csv/_SUCCESS
-rw-r--r--   3 me devs        552 2017-06-29 12:16 /path/out.csv/part-00000

1 个答案:

答案 0 :(得分:0)

Spark分别保存数据的每个分区,因此,每个分区都会得到一个文件part-xxxxx。您指定的路径.save("/path/out.csv")是保存文件的目录,其中的part-xxxxx文件已经采用csv格式。

如果您有多个文件和一个小数据集,则可以使用coalesce(1),然后保存结果以重新获取单个csv文件。对于较大的数据集,我建议先保存,然后使用FileUtil.copyMerge()(Hadoop命令)合并文件。

相关问题