Я использую numPartitions, lowerBound, upperBound в Spark Dataframe для извлечения больших таблиц из оракула в улей, но не могу получить полные данные - PullRequest
0 голосов
/ 02 июля 2018

Я использую numPartitions, lowerBound, upperBound в Spark Dataframe для извлечения больших таблиц из oracle. Но это дает мне данные, эквивалентные только одному разделу. Предположим, что количество разделов равно 10, а общее количество записей равно 100, тогда только 10 записей (всего записей / numPartitions) я могу принять в Hive. Ниже приведен фрагмент моего кода

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")

Не могли бы вы дать мне знать, что мне не хватает.

1 Ответ

0 голосов
/ 02 июля 2018

Без чтения параметра partitionColumn не будет распараллелено. Пожалуйста, укажите имя столбца для ключа раздела. Убедитесь, что с этим ключом ваши данные равномерно разделены, если нет, вы можете получить проблему перекоса данных. Если ваши данные не разделены равномерно, то с помощью функции rownum распределите ваши данные равномерно, используя оператор мод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...