为什么spark scala JDBC将oracle中的数字(1)转换为spark dataframe中的布尔值
下面是我使用spark scala JDBC代码连接到oracle的程序: 火花输出: Oracle表结构: 问题: oracle中的c7列有数字(1),但spark JDBC在导入时将其转换为布尔类型为什么spark scala JDBC将oracle中的数字(1)转换为spark dataframe中的布尔值,oracle,scala,apache-spark,apache-spark-sql,spark-dataframe,Oracle,Scala,Apache Spark,Apache Spark Sql,Spark Dataframe,下面是我使用spark scala JDBC代码连接到oracle的程序: 火花输出: Oracle表结构: 问题: oracle中的c7列有数字(1),但spark JDBC在导入时将其转换为布尔类型 请建议,如何避免真/假?并在dataframe中输出为0/1。请参阅文章:和。Spark的布尔类型映射到oracle的数字(1)(因为oracle中没有布尔类型)。因此,您必须在将表读入Spark后处理此问题[通过在Spark转换中强制转换或使用布尔值]。我使用JDBC的select类中的to_
请建议,如何避免真/假?并在dataframe中输出为0/1。请参阅文章:和。Spark的布尔类型映射到oracle的数字(1)(因为oracle中没有布尔类型)。因此,您必须在将表读入Spark后处理此问题[通过在Spark转换中强制转换或使用布尔值]。我使用JDBC的select类中的to_char方法为任何布尔列解决了此问题 下面是所使用的代码(用于\u char(心跳\u启用))。我也试着用这个数字,但它会产生像1.0000这样的结果,所以我习惯用字符来实现期望的结果
val result=sqlcontext.read.format("jdbc").option("url", "jdbc:oracle:thin:@//Host:1521/QAM").option("driver", "oracle.jdbc.driver.OracleDriver")
.option("dbtable", "(select to_char(HEARTBEATS_ENABLED) as HEARTBEATS_ENABLED[enter link description here][1],APPLICATION_ID,APPLICATION_TYPE_ID,NAME,DESCR,***to_char(ACTIVE_STAT) as ACTIVE_STAT*** ,PROGRAM_ID from MGPH.APPLICATION where APPLICATION_ID in (11,12))").option("user", "myuser").option("password", "my password").option("fetchsize", "100").load()
result.show()
result.printSchema
如果您有足够的灵活性,可以尝试在jdbc查询中将其转换为字符串
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)
val result=sqlcontext.read.format("jdbc").option("url", "jdbc:oracle:thin:@//Host:1521/QAM").option("driver", "oracle.jdbc.driver.OracleDriver")
.option("dbtable", "(select to_char(HEARTBEATS_ENABLED) as HEARTBEATS_ENABLED[enter link description here][1],APPLICATION_ID,APPLICATION_TYPE_ID,NAME,DESCR,***to_char(ACTIVE_STAT) as ACTIVE_STAT*** ,PROGRAM_ID from MGPH.APPLICATION where APPLICATION_ID in (11,12))").option("user", "myuser").option("password", "my password").option("fetchsize", "100").load()
result.show()
result.printSchema