我有一个包含以下数据的日志文件:
1,2008-10-23 16:05:05.0,\N,Donald,Becton,2275 Washburn Street,Oakland,CA,94660,5100032418,2014-03-18 13:29:47.0,2014-03-18 13:29:47.0
2,2008-11-12 03:00:01.0,\N,Donna,Jones,3885 Elliott Street,San Francisco,CA,94171,4150835799,2014-03-18 13:29:47.0,2014-03-18 13:29:47.0
我需要创建一对RDD,邮政编码作为密钥,邮政编码中的名称列表为 (Last Name,First Name)
作为值 .
我需要使用 mapValues
并执行以下操作:
val namesByPCode = accountsdata.keyBy(line => line.split(',')(8)).mapValues(fields => (fields(0), (fields(4), fields(5)))).collect()
但我收到了一个错误 . 谁能告诉我我的陈述有什么问题?
1 回答
keyBy
不会更改该值,因此该值保持单个"unsplit"字符串 . 您希望首先使用map
执行拆分(以获取RDD[Array[String]]
),然后像在拆分结果上一样使用keyBy
和mapValues
:BTW - 根据你的描述,听起来你也想在这个结果上调用
groupByKey
(在调用collect
之前),如果你想让每个邮政编码评估成一个带有名单的单个记录 .keyBy
不执行分组,它只是将RDD[V]
变成RDD[(K, V)]
,使每条记录成为一条记录(可能有许多记录具有相同的"key") .