擅长:python、mysql、java
<p>将列表转换为字典可能是一种选择,但我不建议这样做。它基本上破坏了最初使用pyspark/spark的动机</p>
<p>请注意,当您使用<code>take(n)</code>时,您正试图执行一个操作语句<code>take(n)</code>将n条记录转换为一个列表,当不同的“包”数量增加时,该列表效率不高(如果有100万种包怎么办?)。在<code>take()</code>之前使用<code>filter()</code>将是一种更好、更有效、更美观的方法</p>
<pre><code>from pyspark import SparkConf, SparkContext
conf = SparkConf().setMaster("local").setAppName("RatingsHistogram")
sc = SparkContext(conf=conf)
lines = sc.textFile("<filepath>/2015-12-12.csv")
rdd = lines.map(lambda x: x.split(',')[6])
totalbypackage = rdd.map(lambda x: (x, 1)).reduceByKey(lambda x, y: x + y)
# Filter only the count record in which we are interested
rcpp_count_record = totalbypackage.filter(lambda x: x[0] == "Rcpp")
# Now as we only have 1 row, we can use take(1) or collect() to get only the count part
print(rcpp_count_record.take(1)[0][1])
print(rcpp_count_record.collect()[0][1])
</code></pre>
<p>两个print语句都将在控制台上显示“Rcpp”包的计数</p>
如果有帮助,请考虑对这个答案进行投票。eem></p>