【问题标题】:How to select specific columns through Spack JDBC?如何通过 Spack JDBC 选择特定列?
【发布时间】:2016-10-04 03:04:34
【问题描述】:

现在我正在使用 Spark 连接我的 oracle 数据库。但是,有一种名为“TIMESTAMP WITH TIMEZONE”的列类型,它是 Oracle 中的特定列。当我从表中加载数据而不是包含此类型列时,它会抛出错误“java.sql.SQLException: Unsupported type -101”。

有人知道如何从表中加载特定列吗?然后我可以避免选择“TIMESTAMP WITH TIMEZONE”列。如果有人能找出“java.sql.SQLException: Unsupported type -101”错误会更好。但我认为这可能是 Spark 的一个错误。

我的代码如下,非常感谢。

spark = SparkSession\
    .builder\
    .appName("TestSQL")\
    .getOrCreate()
orc = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:oracle:thin:xxx/xxx@IP:1521/database") \
    .option("dbtable", "xxx.xxx") \
    .load() 

【问题讨论】:

    标签: oracle jdbc apache-spark


    【解决方案1】:

    options 中,您可以传递 sql query in dbtable 键。在sql查询中,您可以选择所需的列。

    例如:

    final String dbTable =
            "(select emp_no, concat_ws(' ', first_name, last_name) as full_name from employees) as employees_name";
    
    Dataset<Row> jdbcDF = 
            sparkSession.read().jdbc(CONNECTION_URL, dbTable, "emp_no", 10001, 499999, 10, connectionProperties);
    

    *代码在java中

    来源:Loading database data using Spark 2.0 Data Sources API

    【讨论】:

    • 非常感谢!它必须是java代码吗?我在 python 代码的 dbtable 参数中传递 SQL 查询,得到一个错误“无效的表名”。
    • 非常感谢,我会尝试一点java。
    • @AndyNie:你可以从我提到的链接中获取帮助
    【解决方案2】:

    另一种方法是在 Oracle 上创建视图,以便您可以在数据库本身中处理 Oracle 特定的数据类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 2018-09-13
      相关资源
      最近更新 更多