如何在S3中查找哪个文件具有特定值?

时间:2019-12-06 16:29:14

标签: amazon-s3 pyspark

我只能通过胶水和通过Pyspark代码访问S3文件,如下所示:

lastModifyingUser

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

目标是-如果我搜索单词s3 = boto3.resource('s3') for bucket in s3.buckets.all(): print(bucket.name) -给我包含该单词的S3文件列表。文件已压缩。

2 个答案:

答案 0 :(得分: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"|
+--------------------+--------------------+

让我知道这是否对您有用。

答案 1 :(得分:0)

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

how to grep files in S3中还存在使用CLI的其他问题,您的方法必须类似:

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

catgrep更简单:获取目标,通过客户端获取,然后通过管道传输到标准输出。