Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ScalaSpark-创建一对带有键和值列表的RDD_Scala_Apache Spark_Bigdata - Fatal编程技术网

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))的成员]