如何使用 pyspark 计算文件中的模式出现次数

How to count pattern occurrence in a file using pyspark

我有两个文件。一个大的有纯数据,一个有以行分隔的模式。

如何使用 map reduce 算法计算大文件中所有模式出现的次数,特别是在使用 python (pyspark) 的 Apache Spark 引擎中。

数据文件:

ABCDEFABCDERFADACCABCDEABA.....

模式文件:

ABC
BCF
CDE

如果你的PattenFile很小(意思是适合你的主人,假设你正在使用一个集群),我会告诉你你需要什么的要点,我希望你完成它。请注意,我假设您已经将数据拆分为 DataFile in trios.

  1. 加载两个文件。

    data = sc.textFile("DataFile")
    pattern = sc.textFile("PatternFile")
    
  2. 广播字典(patternFile),正如你所说的 够小了

    dictionary = pattern.collect()
    broadcast_dictionary = sc.broadcast(dictionary) 
    
  3. 过滤你的 data.

    data = data.filter(lambda x: x in dictionary.value)
    

作为对@Alberto Bonsanto 解决方案的补充,这里介绍了如何将数据分成三部分。不幸的是,pyspark 似乎没有提供 sliding 方法。手动编码相当麻烦。

dat0=flatMap(lambda x:list(x))
        .zipWithIndex()
        .filter(lambda (_,i): i>=0)
        .groupBy(lambda (_,i): i/3).values()
        .map(lambda x: 
          reduce(lambda y1,y2: 
            y1+''+y2,map(lambda (u,_):u,list(x))
           )
         )

此外,您还需要创建类似物 dat1dat2,其中 filter(lambda (_,i): i>=0)filter(lambda (_,i): i>=1)filter(lambda (_,i): i>=2) 替换,以便采取考虑到可能的偏移量。