快速pyspark sequenceFile查找

时间:2018-02-01 20:24:54

标签: python pyspark sequencefile

我使用的是一个相对较小的pyspark sequenceFile(~8gb)格式:

----------------------
|ID    | binary file |
|---------------------
|ABCD  | xxxx....    |
|---------------------
|ABC3  | xxxx....    |
----------------------

有大约150,000个条目

我理解mapreduce是一个非常快速的平台,擅长快速搜索数据库并解压缩二进制文件以快速获取文件中的有趣数据。但是,我并不总是希望使用全部文件,有时我对每个计算的一个或两个文件更感兴趣。

那么重复访问hadoop sequenceFile中的特定条目的最佳方法是什么?

  1. 致电RDD.lookup("ID")(每个参赛作品似乎需要很长时间)
    • 我试着调查为什么这么慢,但我没有发现像sortByKey这样的功能似乎非常有帮助。
    • 每次查找大约需要150秒
  2. 使用RDD.filter(xxx)(一次可以阅读多个,但重新访问的速度仍然很慢)
  3. 运行dict(RDD.collect())(非常快,但需要大量内存+长时间初读)
  4. 所以......这就是我现在所处的位置。

    from pyspark import SparkContext, SparkConf
    conf = SparkConf().setMaster("local[*]")
    conf = (SparkConf().setAppName("imnotsure")
            .set('spark.executor.memory', '4G')
            .set('spark.driver.memory', '10G')
            .set('spark.driver.maxResultSize', '10G'))
    sc = SparkContext(conf=conf)
    db = sc.sequenceFile("DIRECTORY  OF SEQUENCEFILES")
    tofind = ["ABC3"]
    while len(tofind) != 0:
        db.lookup("ABC3") # Takes a long time
        # Do calculations on ABC3
        # maybe return "123D", "13BF"
        tofind = ["123D", "13BF"]
        # Keep going until tofind == []
    

    注意: 我不反对切换格式,也许sequenceFiles不是可行的方式。但是,大小很好,这就是我们提供数据的方式。

0 个答案:

没有答案