pyspark читает jdb c, чтобы получить нижнюю и верхнюю границу значений таблицы DB2 - PullRequest
0 голосов
/ 20 апреля 2020

Я использую приведенный ниже код для получения значений нижней и верхней границ для импорта таблицы из DB2.

Код:

bound_query = "(select min(col1), max(col1) from ccdb2.table1) t"

bound_query_result = spark.read.format("jdbc") \
    .option("url", url) \
    .option("driver", driver) \
    .option("dbtable", bound_query) \
    .option("user", user) \
    .option("password", pswd).load()

Ошибка:

com.ibm.db2.jcc.b.eo: DB2 SQL Error: SQLCODE=-206, SQLSTATE=42703, SQLERRMC=1, DRIVER=3.53.95
        at com.ibm.db2.jcc.b.bd.a(bd.java:676)
        at com.ibm.db2.jcc.b.bd.a(bd.java:60)
        at com.ibm.db2.jcc.b.bd.a(bd.java:127)
        at com.ibm.db2.jcc.b.gm.c(gm.java:2484)
        at com.ibm.db2.jcc.b.gm.d(gm.java:2461)
        at com.ibm.db2.jcc.b.gm.a(gm.java:1962)
        at com.ibm.db2.jcc.t4.db.g(db.java:138)
        at com.ibm.db2.jcc.t4.db.a(db.java:38)
        at com.ibm.db2.jcc.t4.t.a(t.java:32)
        at com.ibm.db2.jcc.t4.sb.h(sb.java:141)
        at com.ibm.db2.jcc.b.gm.bb(gm.java:1933)
        at com.ibm.db2.jcc.b.hm.ec(hm.java:2558)
        at com.ibm.db2.jcc.b.hm.e(hm.java:3259)
        at com.ibm.db2.jcc.b.hm.Rb(hm.java:583)
        at com.ibm.db2.jcc.b.hm.executeQuery(hm.java:557)
        at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD.compute(JDBCRDD.scala:301)
        at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
        at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
        at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:49)
        at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
        at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
        at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:49)
        at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
        at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
        at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:49)
        at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
        at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
        at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
        at org.apache.spark.scheduler.Task.run(Task.scala:109)
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:345)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

Когда я просто даю выбор * из таблицы, это не проблема. При использовании функций MIN и MAX выдается эта ошибка.

Есть ли другой способ получить граничные значения для импорта spark db2?

Had oop Версия: 3.2 Искра: 2.3 .2 Python: 2.7.5

Спасибо, Амрута К

1 Ответ

0 голосов
/ 20 апреля 2020

Проверьте, работает ли это, здесь внесены изменения в запрос и вместо dbtable используется опция запроса.

bound_query = "SELECT min_val, max_val FROM (select min(col1) as min_val, max(col1) as max_val from ccdb2.table1) t"

bound_query_result = spark.read.format("jdbc") \
    .option("url", url) \
    .option("driver", driver) \
    .option("query", bound_query) \
    .option("user", user) \
    .option("password", pswd).load()
...