【问题标题】:Spark performing RDD.zip() and RDD.join() slowlySpark 缓慢执行 RDD.zip() 和 RDD.join()
【发布时间】:2015-03-14 14:37:42
【问题描述】:

我正在尝试使用 Apache Spark 进行简单的情感分类。我从一个包含行号、目标(分数)和评论文本的文本文件开始:

lineNumber[;]0[;]这是一条评论。

我这样分成两个 RDD

    scores = lines.map(lambda line: (line.split("[;]")[0], line.split("[;]")[1]))
    reviews = lines.map(lambda line: (line.split("[;]")[0], line.split("[;]")[2]))

我正在对评论 RDD 执行一些操作(例如拆分单词、删除停用词等),然后尝试构建 TFIDF:

    hash = HashingTF().transform(reviews.values())
    idf = IDF().fit(hash)
    tfidf = idf.transform(hash)
    f = reviews.keys().zip(tfidf)

之后,我想将包含 TFIDF 的评论与分数一起加入并进行分类。

    reviewsAndScores = scores.join(f).values()

但是,上述两个操作(TFIDF+Zip、Join)在我的机器上都需要很长时间,我从 6G 驱动程序和 6G 执行程序内存开始。在一个相对较小的文件 (330MB) 上,这两个任务每次都需要 1 小时。 对于连接,spark ui 告诉我它获得了 427MB 的输入,需要随机写入 178.4MB。但是,我不太确定这意味着什么。

你有什么提示为什么这些操作这么慢吗?

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    运行时间

    join()
    

    方法并不奇怪——因为它需要 n**2 次操作。现在 zip() 更难理解 - 但可能是由于内存限制。内存方面有相当多的开销。

    您可以考虑将数据分成类似分区的段,然后使用

    foreachPartition()
    

    但同样 - 还要考虑获得更多内存。首先:您可以减少驱动程序的内存并为工人提供更多:例如3GB 和 9GB

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多