奇怪的是,我想看看我正在输入的一系列字典中k,v对的数量,但是我发现我似乎做不到。在
lines = ssc.socketTextStream("127.0.0.1", 5006)
json_format = lines.flatMap(lambda recieved: json.loads(recieved))
dict_format = json_format.flatMap(lambda x : len(x) ).reduce(lambda a, b: a+b)
例如,我得到以下错误:
^{2}$我可以假设我们有一系列的字典-json.loads()
中没有失败,但我似乎不能接受这个简单的长度。在
Spark期望提供给^{} 的函数将为它从源RDD/DStream处理的每个元素返回一个可遍历/可遍历的结果(例如列表)。发生
TypeError: 'int' object is not iterable
错误的原因可能是Spark试图迭代从传递给flatMap
的lambda之一返回的不可编辑值。在第二个} 来解决这个问题。在
flatMap
调用(json_format.flatMap
)肯定是个问题,因为len(...)
总是返回一个int
,因此它是这里最有可能的罪魁祸首。因为它的意图似乎是对int
(即长度)执行1对1的转换,所以您应该能够通过将flatMap
替换为^{第一个调用是否有效取决于输入。如果您确定源文件中的每一行都是一个将解析为JSON数组的字符串,那么它应该可以正常工作。但是,如果对文件中任何一行的JSON解析将生成一个类型而不是数组,那么解析函数将向
flatMap
发送一个不可编辑的结果,作业将失败,并出现与您当前看到的类似的错误:相关问题 更多 >
编程相关推荐