gpt4 book ai didi

python - PySpark从具有两种不同文件类型的s3中的zip文件中读取csv

转载 作者:行者123 更新时间:2023-12-04 07:37:09 27 4
gpt4 key购买 nike

我有一个带有 CSV 的 zip 文件和一个 json 映射文件。我想将 csv 读入 spark 数据框,将 json 映射文件读入字典。我已经完成了后面的部分:

import boto3

obj = s3.get_object(Bucket='bucket', Key='key')

z = zipfile.ZipFile(io.BytesIO(obj["Body"].read()))

csvjson = json.loads(z.open(files[1]).read().decode('utf-8'))
一般来说,我想执行以下操作以从 csv 文件中获取 df:
dfRaw = spark.read \
.format("text") \
.option("multiLine","true") \
.option("inferSchema","false") \
.option("header","true") \
.option("ignoreLeadingWhiteSpace","true") \
.option("ignoreTrailingWhiteSpace","true") \
.load(z.open(files[0]).read().decode('utf-8'))
然而这显然不起作用,因为 load()需要一个文件路径,而不是行本身。如何将 zip 文件中的此文件读入 spark 数据框中?

最佳答案

由于您手动“解压缩”CSV 文件并将输出作为字符串,您可以使用 parallelize如下

z = zipfile.ZipFile(io.BytesIO(obj["Body"].read()))
csv = [l.decode('utf-8').replace('\n', '') for l in z.open(files[0]).readlines()]

(spark
.sparkContext
.parallelize(csv)
.toDF(T.StringType())
.withColumn('value', F.from_csv('value', 'ID int, Trxn_Date string')) # your schema goes here
.select('value.*')
.show(10, False)
)

# Output
+----+----------+
|ID |Trxn_Date |
+----+----------+
|null|Trxn_Date |
|100 |2021-03-24|
|133 |2021-01-22|
+----+----------+

关于python - PySpark从具有两种不同文件类型的s3中的zip文件中读取csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67675349/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com