【发布时间】:2015-08-14 22:38:05
【问题描述】:
这里是 spark 的新手,我正在尝试读取 spark 中的管道分隔文件。我的文件如下所示:
user1|acct01|A|Fairfax|VA
user1|acct02|B|Gettysburg|PA
user1|acct03|C|York|PA
user2|acct21|A|Reston|VA
user2|acct42|C|Fairfax|VA
user3|acct66|A|Reston|VA
我在 scala 中执行以下操作:
scala> case class Accounts (usr: String, acct: String, prodCd: String, city: String, state: String)
defined class Accounts
scala> val accts = sc.textFile("accts.csv").map(_.split("|")).map(
| a => (a(0), Accounts(a(0), a(1), a(2), a(3), a(4)))
| )
然后我尝试按键对键值对进行分组,这不确定我这样做是否正确......我是这样做的吗?
scala> accts.groupByKey(2)
res0: org.apache.spark.rdd.RDD[(String, Iterable[Accounts])] = ShuffledRDD[4] at groupByKey at <console>:26
我认为 (2) 是为了将前两个结果返回给我,但我似乎在控制台上没有得到任何返回...
如果我运行一个独特的......我也会得到这个......
scala> accts.distinct(1).collect(1)
<console>:26: error: type mismatch;
found : Int(1)
required: PartialFunction[(String, Accounts),?]
accts.distinct(1).collect(1)
编辑: 本质上,我试图获得一个键值对嵌套映射。例如,user1 看起来像这样:
user1 | {'acct01': {prdCd: 'A', city: 'Fairfax', state: 'VA'}, 'acct02': {prdCd: 'B', city: 'Gettysburg', state: 'PA'}, 'acct03': {prdCd: 'C', city: 'York', state: 'PA'}}
试图一步一步地学习这个,所以我想我会把它分解成块来理解......
【问题讨论】:
-
为了限制结果的数量,你会想使用
take(int)
标签: scala apache-spark