Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么spark scala JDBC将oracle中的数字(1)转换为spark dataframe中的布尔值_Oracle_Scala_Apache Spark_Apache Spark Sql_Spark Dataframe - Fatal编程技术网

为什么spark scala JDBC将oracle中的数字(1)转换为spark dataframe中的布尔值

为什么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_

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

火花输出:

Oracle表结构:

问题:

oracle中的c7列有数字(1),但spark JDBC在导入时将其转换为布尔类型


请建议,如何避免真/假?并在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