ScalaSpark-创建一对带有键和值列表的RDD
我有一个日志文件,其中包含以下数据:ScalaSpark-创建一对带有键和值列表的RDD,scala,apache-spark,bigdata,Scala,Apache Spark,Bigdata,我有一个日志文件,其中包含以下数据: 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
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
val namesByPCode = accountsdata.keyBy(line => line.split(',')(8)).mapValues(fields => (fields(0), (fields(4), fields(5)))).collect()
我需要创建一对RDD,其中邮政编码作为密钥,邮政编码中的姓名列表作为值
我需要使用mapValues
,并执行了以下操作:
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
val namesByPCode = accountsdata.keyBy(line => line.split(',')(8)).mapValues(fields => (fields(0), (fields(4), fields(5)))).collect()
但我有个错误。有人能告诉我我的语句有什么问题吗?
keyBy
不会更改该值,因此该值保持为单个“未拆分”字符串。您希望首先使用map
执行拆分(以获取RDD[Array[String]]]
),然后使用keyBy
和mapValues
,就像对拆分结果所做的那样:
val namesByPCode = accountsdata.map(_.split(","))
.keyBy(_(8))
.mapValues(fields => (fields(0), (fields(4), fields(5))))
.collect()
顺便说一句-根据您的描述,如果您希望每个zipcode都计算为一个包含名称列表的记录,那么听起来您也希望对该结果调用
groupByKey
(在调用collect
)keyBy
不执行分组,它只是将RDD[V]
转换为RDD[(K,V)]
将每个记录保留为一个记录(可能有许多记录具有相同的“键”) 您收到了什么错误?您好Tzach,这实际上不起作用,我使用了val namesByPCode=accountsByPCode.mapValues(fields=>(fields(3),fields(4))).collect(),因为namesByPCode已经由邮政编码键入,但当我尝试使用mkSting()打印它时,我得到了错误:value mkString不是(String,String)的成员,你能告诉我吗?accountsByPCode
来自哪里?这个问题不存在。如果accountsdata
是纯文本RDD,这符合问题的要求-尝试一下,如果它有效,请接受答案,供未来读者查看。不要在评论中提出新问题…另外,请参见我在回答中关于添加groupByKey
呼叫的评论,也许这就是您缺少的。是的,您是对的,它确实有效。现在,我正在尝试打印前5个邮政编码,并按如下方式列出名称:println(s“=============namesByPCode,style2==========”)for(pair,但我得到了以下错误::37:error:value sortByKey不是数组[(String,(String,(String,String))的成员]