使用python将csv转换为拼花文件

使用python将csv转换为拼花文件,python,csv,parquet,Python,Csv,Parquet,我正在尝试将.csv文件转换为.parquet文件。 csv文件(Temp.csv)具有以下格式 1,Jon,Doe,Denver 我使用以下python代码将其转换为拼花地板 from pyspark import SparkContext from pyspark.sql import SQLContext from pyspark.sql.types import * import os if __name__ == "__main__": sc = SparkContext(

我正在尝试将.csv文件转换为.parquet文件。
csv文件(
Temp.csv
)具有以下格式

1,Jon,Doe,Denver
我使用以下python代码将其转换为拼花地板

from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.types import *
import os

if __name__ == "__main__":
    sc = SparkContext(appName="CSV2Parquet")
    sqlContext = SQLContext(sc)

    schema = StructType([
            StructField("col1", IntegerType(), True),
            StructField("col2", StringType(), True),
            StructField("col3", StringType(), True),
            StructField("col4", StringType(), True)])
    dirname = os.path.dirname(os.path.abspath(__file__))
    csvfilename = os.path.join(dirname,'Temp.csv')    
    rdd = sc.textFile(csvfilename).map(lambda line: line.split(","))
    df = sqlContext.createDataFrame(rdd, schema)
    parquetfilename = os.path.join(dirname,'output.parquet')    
    df.write.mode('overwrite').parquet(parquetfilename)
结果只是一个名为,
output.parquet
的文件夹,而不是我正在查找的拼花文件,然后控制台上出现以下错误

我还尝试运行以下代码来面对类似的问题

from pyspark.sql import SparkSession
import os

spark = SparkSession \
    .builder \
    .appName("Protob Conversion to Parquet") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()

# read csv
dirname = os.path.dirname(os.path.abspath(__file__))
csvfilename = os.path.join(dirname,'Temp.csv')    
df = spark.read.csv(csvfilename)

# Displays the content of the DataFrame to stdout
df.show()
parquetfilename = os.path.join(dirname,'output.parquet')    
df.write.mode('overwrite').parquet(parquetfilename)

如何做到最好?使用windows、python 2.7。

使用包
pyarrow
pandas
可以将CSV转换为拼花地板,而无需在后台使用JVM:

import pandas as pd
df = pd.read_csv('example.csv')
df.to_parquet('output.parquet')

您将运行的一个限制是
pyarrow
仅适用于Windows上的Python 3.5+。使用Linux/OSX以Python 2的形式运行代码,或者将windows安装程序升级到Python 3.6。

您可以使用spark作为拼花文件编写:

import boto3
import pandas as pd
import pyarrow as pa
from s3fs import S3FileSystem
import pyarrow.parquet as pq

s3 = boto3.client('s3',region_name='us-east-2')
obj = s3.get_object(Bucket='ssiworkoutput', Key='file_Folder/File_Name.csv')
df = pd.read_csv(obj['Body'])

table = pa.Table.from_pandas(df)

output_file = "s3://ssiworkoutput/file/output.parquet"  # S3 Path need to mention
s3 = S3FileSystem()

pq.write_to_dataset(table=table,
                    root_path=output_file,partition_cols=['Year','Month'],
                    filesystem=s3)

print("File converted from CSV to parquet completed")
spark = SparkSession.builder.appName("Test_Parquet").master("local[*]").getOrCreate()

parquetDF = spark.read.csv("data.csv")

parquetDF.coalesce(1).write.mode("overwrite").parquet("Parquet")

我希望这会有所帮助

有几种不同的方法可以使用Python将CSV文件转换为拼花地板

Uwe L.Korn的熊猫方法非常有效

如果要将多个CSV文件转换为多个拼花/单个拼花文件,请使用Dask。这将把多个CSV文件转换为两个拼花文件:

导入dask.dataframe作为dd
df=dd.read_csv(“./data/people/*.csv”)
df=df.重新分区(npartitions=4)
df.to_拼花地板('./tmp/people_拼花地板4')
如果只想输出一个拼花地板文件,还可以使用
df.repartition(npartitions=1)
。更多关于使用Dask将CSV转换为拼花地板的信息[此处][1]

以下是在Spark环境中工作的PySpark代码段:

从pyspark.sql导入SparkSession
spark=SparkSession.builder\
.master(“本地”)\
.appName(“拼花地板”示例)\
.getOrCreate()
df=spark.read.csv('data/us\u presidents.csv',header=True)
df.repartition(1).write.mode('overwrite').parquet('tmp/pyspark\u us\u presidents'))
您还可以在Spark环境中使用:

将databricks.koalas导入为ks
df=ks.read\u csv('data/us\u presidents.csv'))
df.to_拼花地板(“tmp/考拉_美国总统”)

您可以仅使用pyarrow将csv转换为拼花地板,而不使用熊猫。 当您需要最小化代码依赖性时(例如使用AWS Lambda),它可能会很有用


请参阅pyarrow文档以微调和优化函数。

@lwileczek这是一个不同的问题,因为链接的问题明确要求使用Spark,这只是关于一般使用Python的问题。谢谢您的回答。在Windows上使用Python 2.7是不是有办法做到这一点?这是将单个文件转换成拼花文件的一种非常简单的方法,但是如果我们有多个CSV文件,并且我们想把它变成一个单一的拼花文件,那怎么办?@ Zombraz,如果你正在寻找Python以外的任何东西,你可以循环使用这些文件并将它们转换为实木地板。AWS EMR上的hive在将csv转换为parquet@Zombraz-您可以使用Dask或PySpark将多个CSV文件转换为单个拼花文件(或多个拼花文件)。请参阅我的答案以了解更多详细信息。这是从AWS S3路径读取CSV文件的代码。请使用拼花格式将其存储在AWS S3路径中的分区中。请确保运行以下命令,pip3安装boto3 pip3安装熊猫pip3安装pyarrow pip3安装fs-s3fs pip3安装s3fs你是如何安装pyarrow的而在aws上没有软件包的大小问题的?@Haha最简单的方法是使用已经包含pyarrow的图层请添加一些解释来回答这个问题。使用pyspark将csv转换为拼花地板,这对我有用,希望对我有帮助
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.types import *
import sys

sc = SparkContext(appName="CSV2Parquet")
sqlContext = SQLContext(sc)

schema = StructType([
    StructField("col1", StringType(), True),
    StructField("col2", StringType(), True),
    StructField("col3", StringType(), True),
    StructField("col4", StringType(), True),
    StructField("col5", StringType(), True)])
rdd = sc.textFile('/input.csv').map(lambda line: line.split(","))
df = sqlContext.createDataFrame(rdd, schema)
df.write.parquet('/output.parquet')
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.types import *
import sys

sc = SparkContext(appName="CSV2Parquet")
sqlContext = SQLContext(sc)

schema = StructType([
    StructField("col1", StringType(), True),
    StructField("col2", StringType(), True),
    StructField("col3", StringType(), True),
    StructField("col4", StringType(), True),
    StructField("col5", StringType(), True)])
rdd = sc.textFile('/input.csv').map(lambda line: line.split(","))
df = sqlContext.createDataFrame(rdd, schema)
df.write.parquet('/output.parquet')