【问题标题】:How to get File/Files create by Spark df.write?如何获取由 Spark df.write 创建的文件/文件?
【发布时间】:2021-07-27 07:44:45
【问题描述】:

我需要捕获作为df.write.parquet("s3://bkt/folder", mode="append") 命令的结果创建的镶木地板文件。

我在 AWS EMR pyspark 上运行它。

我可以使用 wr.s3.to_parquet() 使用 awswrangler 来实现这一点,但这并不适合我的 EMR spark 用例。

有这样的功能吗?

我想要 spark 写的 s3://bkt/folder 中的文件列表

谢谢大家

【问题讨论】:

  • 您想要 spark 写入的 s3://bkt/folder 中的文件列表?
  • 是的,就是这样。

标签: apache-spark pyspark parquet amazon-emr


【解决方案1】:

如果您想要一个 spark 写入特定 S3 路径的文件列表,您可以使用以下任一方法:

使用 input_file_name 这将给出记录的来源文件路径,并通过选择 filename 来执行不同的操作:

from  pyspark.sql.functions import input_file_name
df=spark.read.parquet("s3://bkt/folder")
df.withColumn("filename", input_file_name())

或者您可以使用 boto3 列出文件:

from boto3 import client

conn = client('s3')  # again assumes boto.cfg setup, assume AWS S3
for key in conn.list_objects(Bucket='bucket_name')['Contents']:
    print(key['Key'])

【讨论】:

  • yeahh ,, nahh - 我有一个非常高的延迟系统,包含数百万个对象。这正是我想要避免的,必须做 s3 列表
  • 好的,pyspark 中的 input_file_name 方法怎么样?
  • 我已经有了输入文件名,我对输出文件感兴趣。
  • 我说的是读取你用spark写的数据,写完后再做input_file_name
  • 这给了我使用的输入文件,而不是生成的文件
猜你喜欢
  • 2015-07-15
  • 2014-01-28
  • 2016-08-14
  • 2018-11-03
  • 2020-07-19
  • 1970-01-01
  • 2011-05-23
  • 2019-06-15
  • 1970-01-01
相关资源
最近更新 更多