【发布时间】:2021-01-01 05:14:26
【问题描述】:
我将通过在 CentOS 7 上运行 PythonPageRank 来测试 Spark 的 RDD 缓存:
spark-submit --master yarn --deploy-mode cluster /usr/spark/examples/src/main/python/pagerank.py input/testpr.txt 10
如您所见,我正在做 PageRank,因此 testpr.txt 和 10 是参数。 pagerank.py 文件包含以下代码:
spark = SparkSession\
.builder\
.appName("PythonPageRank")\
.getOrCreate()
lines = spark.read.text(sys.argv[1]).rdd.map(lambda r: r[0])
links = lines.map(lambda urls: parseNeighbors(urls)).distinct().groupByKey().cache()
ranks = links.map(lambda url_neighbors: (url_neighbors[0], 1.0))
for iteration in range(int(sys.argv[2])):
contribs = links.join(ranks).flatMap(
lambda url_urls_rank: computeContribs(url_urls_rank[1][0], url_urls_rank[1][1]))
ranks = contribs.reduceByKey(add).mapValues(lambda rank: rank * 0.85 + 0.15)
for (link, rank) in ranks.collect():
print("%s has rank: %s." % (link, rank))
spark.stop()
如您所见,links = lines.map(lambda urls: parseNeighbors(urls)).distinct().groupByKey().cache() 包含 缓存。但是,当我查看 Spark UI 的存储页面时,我找不到任何关于 cache 的信息。
这里是应用的Job page,动作collect()生成一个job:
这是应用的Stage page,说明PageRank中包含很多迭代。
这是应用程序的存储页面,其中应该包含缓存的 RDD。但是,它什么都不包含,似乎cache() 不起作用。
为什么我在存储页面上看不到任何缓存的 RDD?为什么 pagerank.py 中的 cache() 不起作用?希望有人可以帮助我。
【问题讨论】:
标签: scala apache-spark rdd