Spark從關(guān)系數(shù)據(jù)庫(kù)加載數(shù)據(jù)

整體思路是通過(guò)partition并行鏈接關(guān)系數(shù)據(jù)庫(kù)。

實(shí)現(xiàn):

1. 加載驅(qū)動(dòng)程序

正確配置:

--driver-class-path "driver_local_file_system_jdbc_driver1.jar:driver_local_file_system_jdbc_driver2.jar" 
  --class "spark.executor.extraClassPath=executors_local_file_system_jdbc_driver1.jar:executors_local_file_system_jdbc_driver2.jar"

如果需要在NoteBook中執(zhí)行任務(wù),需要在啟動(dòng)前設(shè)置EXTRA_CLASSPATH,執(zhí)行如下命令:

export EXTRA_CLASSPATH=path_to_the_first_jar:path_to_the_second_jar

2. 并行加載

有兩種方式:

1)按照指定列進(jìn)行統(tǒng)一分區(qū)

2)通過(guò)用戶自定義謂詞分區(qū)

按照指定列進(jìn)行統(tǒng)一分區(qū)

指定列必須是數(shù)字類型
使用方法

sqlctx.read.jdbc(url = "<URL>", table = "<TABLE>",
  columnName = "<INTEGRAL_COLUMN_TO_PARTITION>",
  lowerBound = minValue,
  upperBound = maxValue,
  numPartitions = 20,
  connectionProperties = new java.util.Properties()
)

通過(guò)用戶自定義謂詞分區(qū)

使用方法

val predicates = Array("2015-06-20" -> "2015-06-30", "2015-07-01" -> "2015-07-10", "2015-07-11" -> "2015-07-20",
  "2015-07-21" -> "2015-07-31").map {
    case (start, end) => s"cast(DAT_TME as date) >= date '$start' " + "AND cast(DAT_TME as date) <= date '$end'"
}
sqlctx.read.jdbc(url = "<URL>", table = "<TABLE>", predicates = predicates, connectionProperties = new java.util.Properties())

3.表格union

def readTable(table: String): DataFrame
List("<TABLE1>", "<TABLE2>", "<TABLE3>").par.map(readTable).reduce(_ unionAll _)

.par 表示readTable函數(shù)會(huì)并行調(diào)用,而不是線性順序。

4.映射為Case Class

case class MyClass(a: Long, b: String, c: Int, d: String, e: String)
dataframe.map {
 case Row(a: java.math.BigDecimal, b: String, c: Int, _: String, _: java.sql.Date,
          e: java.sql.Date, _: java.sql.Timestamp, _: java.sql.Timestamp, _: java.math.BigDecimal,
          _: String) => MyClass(a = a.longValue(), b = b, c = c, d = d.toString, e = e.toString)
}

不可以處理包含null值的記錄??梢酝ㄟ^(guò)

dataframe.na.drop()

通過(guò)處理后,丟棄包含null的記錄。

參考

利用tachyong優(yōu)化任務(wù)從小時(shí)到秒

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容