我有如下記錄。如果第三個屬性爲All
,我想將單個記錄轉換爲值分別爲EXTERNAL
和INTERNAL
的兩個記錄。如何根據列生成多個記錄?
輸入數據集:
Surender,cts,INTERNAL
Raja,cts,EXTERNAL
Ajay,tcs,All
預期輸出:
Surender,cts,INTERNAL
Raja,cts,EXTERNAL
Ajay,tcs,INTERNAL
Ajay,tcs,EXTERNAL
我的星火代碼:
case class Customer(name:String,organisation:String,campaign_type:String)
val custRDD = sc.textFile("/user/cloudera/input_files/customer.txt")
val mapRDD = custRDD.map(record => record.split(","))
.map(arr => (arr(0),arr(1),arr(2))
.map(tuple => {
val name = tuple._1.trim
val organisation = tuple._2.trim
val campaign_type = tuple._3.trim.toUpperCase
Customer(name, organisation, campaign_type)
})
mapRDD.toDF().registerTempTable("customer_processed")
sqlContext.sql("SELECT * FROM customer_processed").show
可能有人幫我解決這個問題?
儘可能多我喜歡你已經把答案的方式,我不同意你的基準方法。您將比較flatMap與3行的爆炸作爲輸入,並得出結論:flatMap速度更快,這裏是我不同意的地方。 – eliasah
正確。我同意你的觀點,數據集的大小可能會導致一個錯誤的結論,但是......直到你證明我錯了,那是我們唯一的基準。 「信仰與結果」 - 讓自己選擇你最喜歡的。 –
您是否認真對待3行數據集上的Spark代碼基準測試會告訴您有關性能的任何信息? – mtoto