【问题标题】:How to find which file holds specific value in S3?如何在 S3 中查找哪个文件具有特定值?
【发布时间】:2019-12-07 03:33:34
【问题描述】:

我只能通过 Glue 和 Pyspark 代码访问 S3 文件:

s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
    print(bucket.name)

如何找到具有特定价值的文件? (例如模拟 cat 和 grep)

目标是 - 如果我搜索单词 test - 给我包含这个单词的 S3 文件列表。文件是 GZipped。

【问题讨论】:

  • 这能回答你的问题吗? How to grep into files stored in S3
  • 否,因为无权访问aws s3 - 只能通过 Pyspark 到 Glue Devendpoint(并在有问题的代码 sn-p 中查看 s3)..

标签: amazon-s3 pyspark


【解决方案1】:

在pyspark中,我们可以像下面这样搜索文件中的内容:

from pyspark.sql.functions import input_file_name

input_path = "data/" # This can be a S3 location
data = spark.read.text(input_path).select(input_file_name(), "value").rdd
df = spark.createDataFrame(data)
df2 = df.filter(df["value"].contains("F1"))


>>> df.show()
+--------------------+--------------------+
|   input_file_name()|               value|
+--------------------+--------------------+
|file:///Users/hbo...|"`F1`","`F2`","`F3`"|
|file:///Users/hbo...|        "a","b","c"'|
|file:///Users/hbo...|         "d","e","f"|
|file:///Users/hbo...|      "F1","F2","F3"|
|file:///Users/hbo...|         "a","b","c"|
|file:///Users/hbo...|         "d","e","f"|
+--------------------+--------------------+

>>> df2 = df.filter(df["value"].contains("F1"))
>>> df2.show()
+--------------------+--------------------+
|   input_file_name()|               value|
+--------------------+--------------------+
|file:///Users/hbo...|"`F1`","`F2`","`F3`"|
|file:///Users/hbo...|      "F1","F2","F3"|
+--------------------+--------------------+

让我知道这是否适合你。

【讨论】:

    【解决方案2】:

    即使您只能使用 boto 而不能使用 AWS CLI,您的可用功能也是相同的(请参阅 this question,了解 CLI 和 boto 之间的区别)。

    how to grepfiles in S3 上存在其他问题,使用 CLI,您的方法必须类似:

    1. 使用客户端在本地获取文件数据(您可能希望逐个文件执行此操作,或者至少分批处理,假设文件有些大和/或很多。
    2. 使用 shell 命令调用(例如 grep)或代码逻辑来搜索文件。
    3. 很好地格式化您的输出,以便将每个结果绑定回其原始 S3 文件。

    cat 甚至比grep 更简单:获取一个目标,通过客户端获取它,然后将其通过管道传输到标准输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多