我正在使用scala和amp; spark并希望从RDD或LIST [Row]制作CSV文件。
我想处理'ListRDD'数据parellel所以我输出的数据将不止一个文件。
val conf = new SparkConf().setAppName("Csv Application").setMaster("local[2]")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
val logFile = "data.csv "
val rawdf = sqlContext.read.format("com.databricks.spark.csv")....
val rowRDD = rawdf.map { row =>
Row(
row.getAs( myMap.ID).toString,
row.getAs( myMap.Dept)
.....
)
}
val df = sqlContext.createDataFrame(rowRDD, mySchema)
val MapRDD = df.map { x => (x.getAs[String](myMap.ID), List(x)) }
val ListRDD = MapRDD.reduceByKey { (a: List[Row], b: List[Row]) => List(a, b).flatten }
myClass.myFunction( ListRDD)
在myClass ..
def myFunction(ListRDD: RDD[(String, List[Row])]) = {
var rows: RDD[Row]
ListRDD.foreach( row => {
rows.add? gather? ( make(row._2)) // make( row._2) will return List[Row]
})
rows.saveAsFile(" path") // it's my final goal
}
def make( list: List[Row]) : List[Row] = {
data processing from List[Row]
}
我试图通过sc.parallelize(list)从List制作RDD数据,但不知何故没有任何效果。 anyidea从make函数生成RDD类型数据。
答案 0 :(得分:0)
如果您想从List [Row]中创建RDD,可以采用以下方法
//Assuming list is your List[Row]
val newRDD: RDD[Object] = sc.makeRDD(list.toArray());