我正在使用Spark Dataframe中的numPartitions,lowerBound,upperBound从oracle.but中获取大表,它给我的数据只相当于一个分区。假设分区数为10,记录总数为100,那么我在Hive中只能摄取10条记录(记录总数/numPartitions)。下面是我的代码片段
val hiveContext = SparkApp.getHiveContext("AppName")
val jdbcUsername = "MYUSERNAME"
val jdbcPassword = "MYPASSWORD"
val jdbcDatabase ="DBNAME"
val jdbcUrl = "jdbc:oracle:thin:@//hostname:1522/servicename"
val lowerBound = 1
val totalRecords = 100
val partitions = 10
val orclTableName = "MYTEST_TABLE"
val columnName = "rownum"
val connectionProperties = new Properties()
connectionProperties.put("user", s"${jdbcUsername}")
connectionProperties.put("password", s"${jdbcPassword}")
connectionProperties.put("driver","oracle.jdbc.driver.OracleDriver")
val orclTableDF = hiveContext.read.jdbc(url=jdbcUrl,table=orclTableName,columnName = columnName,lowerBound=lowerBound, upperBound= totalRecords , numPartitions=partitions, connectionProperties=connectionProperties)orclTableDF.write.saveAsTable("MYTEST_NEW_TABLE")
你能告诉我我错过了什么吗?
发布于 2018-07-03 00:18:50
如果没有partitionColumn,参数读取将不会并行化。请提供分区键的列名。确保使用该键对数据进行均匀分区,否则可能会出现数据倾斜问题。如果您的数据不是均匀分区的,那么使用rownum函数通过mod运算符均匀分布您的数据。
https://stackoverflow.com/questions/51139764
复制相似问题