2016-09-06 80 views
0

我有一張擁有4百萬條記錄和新數據的表格,每天都有新的數據,我需要在處理新數據後更新表格。目前我正在爲此目的這樣做。我正在使用scala。從Spark Mysql快速更新

val batchSize = 1000 
df.rdd mapPartitions (_ grouped batchSize) foreach { batch => 
    { 
    val connection = getConnection(); 
    val statement = connection.createStatement(); 
    batch.foreach { row => 
     val query = "UPDATE temp SET file_name='" + row.get(0) + " WHERE id=" + row.get(3); 
     statement.executeUpdate(query); 

    } 
    connection.close(); 
    } 
} 

這不是確切的查詢,但我這樣做。這需要大約1小時來更新表格。我需要提高性能。我怎樣才能達到性能。

回答

1
  1. 如果SQL數據庫未被索引,則根據row.get(3)字段添加索引。
  2. 如果SQL數據庫沒有InnoDB的,使它的InnoDB - InnoDB的是併發操作(需要併發)

它看起來像火花併發部分正確地進行進一步的優化應該變得更好從基礎設施(在這種情況下,數據庫)

+0

是我使用innoDB,也有索引的關鍵,但最大更新每秒6000到7000和表400萬行約11分鐘。 –

+0

@AtifShahzad你可以嘗試進一步並行'批處理',它是什麼數據類型?你可以像這樣使用'par'關鍵字:'(1 to 10000).toArray.par' –

+0

批處理數據類型是Seq [Row] –