pyspark和reduceByKey:如何做一个简单的总和

时间:2016-01-28 19:13:12

标签: python apache-spark pyspark

我正在尝试使用Spark(pyspark)中的一些代码进行分配。我第一次使用这个环境,所以我肯定错过了一些东西......

我有一个名为c_views的简单数据集。

如果我跑 c_views.collect()

我得到了 […] (u'ABC', 100), (u'DEF', 200), (u'XXX', 50), (u'XXX', 70)] […]

我需要实现的是所有单词的总和。所以我猜我应该得到类似的东西:

(u'ABC', 100), (u'DEF', 200), (u'XXX', 120)

所以我要做的是(按照作业中的提示):

首先我为输入数据集定义函数sum_views(a,b), 然后运行reduceByKey,即

c_views.reduceByKey(sum_views).collect()

但是我不明白我在函数中编码的确切内容。我正在尝试很多东西,但我总是遇到错误。工作流程有意义吗?其他简单的方法来实现结果?

有什么建议吗?提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  

实现结果的其他简单方法?

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "data_pipelines/tasks/impala_task.py", line 96, in run
    cursor = self.get_cursor()
  File "data_pipelines/tasks/impala_task.py", line 65, in get_cursor
    timeout=_load_impala_timeout()).cursor()
  File "/Library/Python/2.7/site-packages/impala/hiveserver2.py", line 88, in cursor
    session = self.service.open_session(user, configuration)
  File "/Library/Python/2.7/site-packages/impala/hiveserver2.py", line 798, in open_session
    resp = self._rpc('OpenSession', req)
  File "/Library/Python/2.7/site-packages/impala/hiveserver2.py", line 724, in _rpc
    response = self._execute(func_name, request)
  File "/Library/Python/2.7/site-packages/impala/hiveserver2.py", line 741, in _execute
    return func(request)
  File "/Library/Python/2.7/site-packages/impala/_thrift_gen/TCLIService/TCLIService.py", line 175, in OpenSession
    return self.recv_OpenSession()
  File "/Library/Python/2.7/site-packages/impala/_thrift_gen/TCLIService/TCLIService.py", line 191, in recv_OpenSession
    raise x
thrift.Thrift.TApplicationException: Invalid method name: 'OpenSession'

或者如果您更喜欢lambda表达式:

from operator import add 

c_views.reduceByKey(add)
  

我不明白我在函数

中编码的确切内容

它必须是一个函数,它接受与RDD中的值相同类型的两个值,并返回与输入相同类型的值。它也必须是associative,这意味着最终结果不能取决于你如何安排括号。