我正在尝试使用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()
但是我不明白我在函数中编码的确切内容。我正在尝试很多东西,但我总是遇到错误。工作流程有意义吗?其他简单的方法来实现结果?
有什么建议吗?提前感谢您的帮助。
答案 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,这意味着最终结果不能取决于你如何安排括号。