2016-04-26 242 views
0

我使用spark編寫了從mysql到cassandra的數據遷移代碼。我試圖概括它,讓給定一個conf文件它可以遷移任何表。這裏即時通訊停留在2個地方:如何在spark-scala中使用select()和map()?

  1. val dataframe2 = dataframe.select("a","b","c","d","e","f") 從MySQL裝入表後,我只想選擇幾個欄,我有這些列的列表的名稱。這怎麼用呢?
  2. val RDDtuple = dataframe2.map(r => (r.getAs(0), r.getAs(1), r.getAs(2), r.getAs(3), r.getAs(4), r.getAs(5))) 在這裏,每個表格可能有不同數量的列,所以如何實現這一點?
+0

我不知道我在代碼中瞭解問題 – eliasah

+0

我已經編寫了im在select()中顯式指定列名稱(我不想要),如果im錯誤會糾正我,但select()會不要將數組或列表作爲參數。另外,如果列數不固定,map()如何改變? –

+0

當然是的,select可以把一個重複的參數作爲參數。至於你的第二個查詢,你可以將你的行轉換成一個帶有隱式函數的字符串,然後在這個字符串上分割以創建一個數組,如果你想將它轉換成一個元組,那麼你需要在後面處理它。 – eliasah

回答

0
  1. select()使用變量數列,你列的名單可以轉換這樣的:

val columns = List("a", "b", "c", "d") val dfSelectedCols = dataFrame.select(columns.head, columns.tail :_*)

說明:DataFrame's select(String, String...)的第一個參數是必須的,所以在使用columns.head。列表的其餘部分需要使用columns.tail :_*轉換爲可變參數。

  • 這不是從你的例子很清楚,但我想這xRDD[Row]和你正試圖轉換成TupleRDD S,對吧?請提供更多細節,並使用有意義的變量名稱。 x,yz是不好的選擇,特別是如果沒有明確的打字。
  • +0

    Thanx很多,這個工程。就(2)而言,x是'數據框',我希望將它轉換爲元組的'RDD'。對不起,名字,我會記住下一次 –