2016-09-15 65 views
-1


我找到了一些解释来做到这一点,但我仍然无法做到这一点!拆分和斯卡拉选择

我想分割val data=sc.textFile("hdfs://ncdc/isd-history.csv")

data有以下形式:("949999","00338","PORTLAND (CASHMORE)","AS","","","-38.320","+141.480","+0081.0","19690724","19781113")

我想要分割数据,并采取只有1 (949999)和第三(PORTLAND (CASHMORE))

我已经这样做了,

val RDD = (data.filter(s => (s.split(',')(0) , s.split(',')(2)))) 

但是,它不起作用。

+0

它究竟如何不起作用?任何错误?什么是输出? –

回答

0

RDD.filter过滤器记录,而不是“列” - 它预计从记录类型(字符串,我认为,在这种情况下),以Boolean功能,并会筛选出该函数返回false所有记录。

你试图变换每个记录从一个字符串转换为元组(而“过滤”该字符串的出部分),所以你应该使用RDD.map而不是RDD.filter

val RDD = data.map(s => (s.split(',')(0), s.split(',')(2))) 

或更好然而:

val RDD = data.map(_.split(',')).map(arr => (arr(0), arr(2))) 
0

您应该使用split拆分字符串而不是集合。

如果这是一个元组的RDD,这应该工作:

val RDD = data map(row => (row._1, row._3))

如果这是Array/Seq[String]刚子的指标02_1_3一个RDD