当前位置: 首页 > 知识库问答 >
问题:

为什么spark scala JDBC将oracle中的NUMBER(1)转换为spark dataframe中的boolean

方嘉言
2023-03-14

下面是我使用spark scala JDBC代码连接到oracle的程序:

    /usr/hdp/current/spark2-client/bin/spark-shell --driver-memory 5g --executor-memory 5g --jars /usr/hdp/current/sqoop-client/lib/ojdbc7.jar

import org.apache.spark.sql.SQLContext
    val sqlcontext = new org.apache.spark.sql.SQLContext(sc)
    val dataframe_mysql = sqlcontext.read.format("jdbc").option("url", "jdbc:oracle:thin:@//Host:1521/QAM").option("driver", "oracle.jdbc.driver.OracleDriver").option("dbtable", "(select * from MGPH.APPLICATION where APPLICATION_ID in (11,12))").option("user", "XXXXXXXXXX").option("password", "xxxxxxxxx").option("fetchsize", "100").load()
    dataframe_mysql.show()

火花输出:

scala> dataframe_mysql.show()
+--------------+-------------------+--------------------+--------------------+-----------+----------+------------------+
|c1|c2|                c3|               c4|c5|c6|c7|
+--------------+-------------------+--------------------+--------------------+-----------+----------+------------------+
|            11|                  1|Safire.Accumulato...|Safire Accumulato...|       true|      3346|             false|
+--------------+-------------------+--------------------+--------------------+-----------+----------+------------------+
Name                Null?    Type          
------------------- -------- ------------- 
c1     NOT NULL NUMBER(3)     
c2 NOT NULL NUMBER(2)     
c3 NOT NULL VARCHAR2(50)  
c4 NOT NULL VARCHAR2(500) 
c5         NOT NULL NUMBER(1)     
c5                   NUMBER(10)    
c7 NUMBER(1)     

共有1个答案

傅琦
2023-03-14

请参阅文章:http://www.ericlin.me/2017/05/oracle-number10-field-maps-to-boolean-in-spark/和https://github.com/apache/spark/pull/14377。Spark的BooleanType映射到oracle的NUMBER(1)(因为在oracle中没有布尔类型)。因此,在将表读入spark后(通过强制转换或在spark转换中使用布尔值)必须处理此问题。

 类似资料:
  • 问题内容: 我有一个表,其中有一个名为的列。其数据类型为。 我想对这一栏进行总结。 总计=> 如何使用ANSI SQL或Oracle SQL执行此操作? 问题答案: 您可以使用来分隔小时,分钟和秒,然后将其向上,最后使用function将其转换为type。

  • 问题内容: 任何数字,就是数字。字符串看起来像一个数字,它是数字。其他所有内容,全都归NaN。 问题答案: 据我所知,有4种方法可以做到这一点。 通过我进行的这项快速测试,它实际上取决于浏览器。 标记为3种浏览器中最快的,但是它使代码难以阅读…因此,请选择您喜欢的任何方式!

  • 问题内容: 是否有任何技术可以允许这样的行设置 产生结果 实际上,这是行到范围的操作。我正在Oracle Land上玩,并且希望您提出任何建议。 问题答案: 我觉得可能可以对此进行改进,但是它可以起作用:

  • 问题内容: 如何在不使用任何第三方库的情况下将JavaScript中的“ 1”转换为“0001”。我已经使用spritf在php中完成了此操作: 问题答案: 这是一个聪明的小把戏(我想我以前在SO上看到过): 如果子字符串的第二个参数为负数,则JavaScript比某些语言宽容得多,因此它会“正确地溢出”(或根据视图的方式错误地溢出): 也就是说,上面的内容: 1->“ 0001” 12345->

  • 问题内容: 我发现一些代码我工作的地方的点被强制转换,因为它是传递给方法。 为什么要这样做? 我知道这个问题涉及重载的方法,并使用类型转换来确定要调用的方法的版本。 但是,如果不执行强制类型转换,如果使用空参数调用该方法,那么是否会重选带有其他类型的参数的重载方法呢?那么演员阵容还能完成什么呢? 问题答案: 如果 未 执行转换,则将选择 最具体的 版本。 可以是type 或type 的空引用。因此

  • 本文向大家介绍js中将String转换为number以便比较,包括了js中将String转换为number以便比较的使用技巧和注意事项,需要的朋友参考一下 string没转换就拿去比较,结果是很头疼的 写的时候不细心,就没转换,然后拿去粗略测试下, 1<2 对的,就过了 然后 5.002>21.003 出现奇葩的结果了 在没有转换数据类型进行>,<的判断时候,系统比对的是unicode编码的值,出