【发布时间】:2019-01-21 23:47:58
【问题描述】:
问题陈述: 我正在尝试在 Scala 中编写一个 Spark 代码,它将从 HDFS 加载下面提到的两个图块(1. 具有 id 和名称的文件 2. 具有 id 和薪水的文件)并加入相同的,并产生(name.salary)值。并按薪水将数据保存在多个瓦片组中(意味着每个文件将具有相同薪水的员工的名称。文件名也必须包括薪水。
EmployeeName.csv
E01,Lokesh
E02,Bhupesh
E03,Amit
E04,Ratan
E05,Dinesh
E06,Pavan
07,Tejas
E08,Sheela
E09,Kumar
E10,Venkat
EmployeeSalary.csv
E01,50000
E02,50000
E03,45000
E04,45000
E05,50000
E06,45000
E07,50000
E08,10000
E09,10000
E10,10000
我尝试了以下,但它没有运行。看起来另一个 RDD 中的 RDD 函数不起作用。我还能怎么解决这个问题?
val employeename = sc.textFile("/user/cloudera/EmployeeName").map(x => (x.split(",")(0),x.split(",")(1)))
val employeesalary = sc.textFile("/user/cloudera/EmployeeSalary").map(s => (s.split(",")(0),s.split(",")(1)))
val join = employeename.join(employeesalary).map({case(id,(name,salary)) => (salary,name)})
val group = join.groupByKey().map({case(key, groupvalues) => {
(key,groupvalues.toList)
}}).sortByKey()`enter code here`
val rdd1 = group.map{case (k,v) => k->sc.parallelize(v)}
rdd1.foreach{case (k,rdd) => rdd.saveAsTextFile("user/cloudera/"+k)}
【问题讨论】:
-
正确,你不能在另一个 rdd 中有一个 rdd。使用数据框和
partitionby获取不同的文件怎么样?
标签: scala apache-spark