You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Nan Xu (JIRA)" <ji...@apache.org> on 2017/03/23 17:26:41 UTC

[jira] [Created] (PHOENIX-3751) spark 2.1 with Phoenix 4.10 load data as dataframe fail

Nan Xu created PHOENIX-3751:
-------------------------------

             Summary: spark 2.1 with Phoenix 4.10 load data as dataframe fail
                 Key: PHOENIX-3751
                 URL: https://issues.apache.org/jira/browse/PHOENIX-3751
             Project: Phoenix
          Issue Type: Bug
    Affects Versions: 4.10.0
         Environment: HBase 1.14
spark 2.10
phoenix: 4.10
            Reporter: Nan Xu


create phoenix table: 
create table phoenix.quote (  
sym Varchar not null, 
src varchar,
kdbPublishTime time not null,
location varchar,
bid DOUBLE,
ask DOUBLE,
bsize unsigned_int,
asize unsigned_int, 
srcTime time,
layer varchar,
expiryTime time,
quoteId varchar,
recvTime time, 
distTime  time,
"TIME" time
CONSTRAINT quote_pk PRIMARY KEY (sym, src, kdbPublishTime)) COMPRESSION='SNAPPY', DATA_BLOCK_ENCODING='FAST_DIFF', VERSIONS=1000

insert data:
SYM	SRC	KDBPUBLISHTIME	LOCATION	BID	ASK	BSIZE	ASIZE	SRCTIME	           LAYER	EXPIRYTIME	QUOTEID	      RECVTIME	   DISTTIME	TIME
6AH7	cme1	03:42:59	N	       0.7471	0.7506	20	25	03:42:59	   (null)	    (null)	(null)	       03:42:59	    (null)	03:42:59
6AH7	cme1	03:42:59	N	       0.7474	0.7506	25	25	03:42:59	   (null)	    (null)	(null)	       03:42:59	    (null)	03:42:59

val spark = SparkSession
    .builder()
    .appName("load_avro")
    .master("local[1]")
    .config("spark.sql.warehouse.dir", "file:/tmp/spark-warehouse")
    .getOrCreate()
 val df = spark.sqlContext.phoenixTableAsDataFrame("PHOENIX.QUOTE", Seq("SYM","SRC", "EXPIRYTIME"), zkUrl = Some("a1.cluster:2181"))
  df.show(100)

problem is in PhoenixRDD:140

 val rowSeq = columns.map { case (name, sqlType) =>
        val res = pr.resultMap(name)
          // Special handling for data types
          if (dateAsTimestamp && (sqlType == 91 || sqlType == 19)) { // 91 is the defined type for Date and 19 for UNSIGNED_DATE
            new java.sql.Timestamp(res.asInstanceOf[java.sql.Date].getTime)
          } else if (sqlType == 92 || sqlType == 18) { // 92 is the defined type for Time and 18 for UNSIGNED_TIME
            new java.sql.Timestamp(res.asInstanceOf[java.sql.Time].getTime)
          } else {
            res
          }
      }
res.asInstanceOf[java.sql.Time].getTime could be null and get NPE.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)