在Spark 2.0中加载压缩的gzip压缩文件

时间:2016-11-02 10:37:14

标签: apache-spark pyspark

如何在Spark 2.0上的Pyspark中加载gzip压缩的csv文件?

我知道可以按如下方式加载未压缩的csv文件:

spark.read.format("csv").option("header",          
                                "true").load("myfile.csv")

spark.read.option("header", "true").csv("myfile.csv")

3 个答案:

答案 0 :(得分:12)

我刚刚发现以下内容适用于gzipped csv文件:

spark.read.option("header", "true").csv("myfile.csv")

答案 1 :(得分:1)

您可以使用select t.*, r.premium from t join reference r on t.category = r.category and t.happyhourtime = r.happyhourtime;

文件扩展名应为spark.sparkContext.textFile("file.gz")

答案 2 :(得分:0)

我不确定在写这里的答案和我遇到这个问题时这是否发生了变化,但我想插入我的发现,以供我自己和也遇到同样问题的其他人将来参考。我正在将 GZIP 压缩的 CSV 文件加载到 Google 托管的 Spark-As-A-Service 产品(即“Dataproc”)中的 Spark 2.4.7 版和 python 3.7.4 版上的 PySpark DataFrame 中。如果您想进一步研究规范,基础 Dataproc 映像版本为 1.5-debian10

我的问题是我无法成功读取 CSV,而所有输入仍然是乱码。我能够通过更改文件名的结尾来进行一个小调整,使文件后缀为 resource "aws_internet_gateway" "gw" { vpc_id = aws_vpc.UAT-vpc.id } resource "aws_route_table" "rt" { vpc_id = aws_vpc.UAT-vpc.id route { cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.gw.id } } resource "aws_main_route_table_association" "a" { vpc_id = aws_vpc.UAT-vpc.id route_table_id = aws_route_table.rt.id } ,然后一切正常。这是重现问题的代码。

.gz

然后我可以运行 pyspark 作业,甚至是交互式 pyspark 会话(如下图所示),然后验证 spark 不会像查看文件名那样智能地检测文件类型并根据其名称解释文件类型.

# This is a shell script to get a dummy file created with 2 different endings
echo 'foo,bar,baz' > test.csv
gzip test.csv
# So now there are 2 files with 2 endings
cp test.csv.gz test_csv

遗憾的是,无法指定诸如 $ pyspark Python 3.7.4 (default, Aug 13 2019, 20:35:49) [GCC 7.3.0] :: Anaconda, Inc. on linux Type "help", "copyright", "credits" or "license" for more information. Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ `_/ /__ / .__/\_,_/_/ /_/\_\ version 2.4.7 /_/ Using Python version 3.7.4 (default, Aug 13 2019 20:35:49) SparkSession available as 'spark'. >>> filename_noend = 'test_csv' >>> filename_end = 'test.csv.gz' >>> schema = 'field1 string,field2 string,field3 string' >>> df_noend = spark.read.csv(path=filename_noend, schema=schema, header=False) >>> df_noend.show() +--------------------+-------------+------+ | field1| field2|field3| +--------------------+-------------+------+ ���`test.cs...|�*.�+T+ | null| +--------------------+-------------+------+ >>> df_end = spark.read.csv(path=filename_end, schema=schema, header=False) >>> df_end.show() +------+------+------+ |field1|field2|field3| +------+------+------+ | foo| bar| baz| +------+------+------+ >>> exit() 之类的内容。因此,请以 compression='gzip' 结尾保存您的 gzip 压缩文件,您就可以开始了!