2017-08-29 25 views
8

के साथ टेराडाटा तालिका निकालने के बाद NullPointerException मुझे स्कैला (2.11)/स्पार्क (2.1.0) के साथ छत पर टेराडाटा (केवल पढ़ने के लिए उपयोग) से एक तालिका निकालने की आवश्यकता है। मैं एक dataframe कि मैं लोड कर सकते हैं का निर्माण कर रहा हूँ सफलतापूर्वकस्केल/स्पार्क

val df = spark.read.format("jdbc").options(options).load() 

लेकिन df.show मुझे एक NullPointerException देता है:

java.lang.NullPointerException 
at org.apache.spark.sql.catalyst.expressions.codegen.UnsafeRowWriter.write(UnsafeRowWriter.java:210) 

मैंने किया था एक df.printSchema और मुझे पता चला है कि इस एनपीई के लिए कारण यह है कि है डेटासेट में (nullable = false) कॉलम के मान हैं (ऐसा लगता है जैसे टेराडाटा मुझे गलत जानकारी दे रहा है)। दरअसल, अगर मैं समस्याग्रस्त कॉलम छोड़ देता हूं तो मैं df.show प्राप्त कर सकता हूं।

तो, मैं सभी स्तंभों (nullable = true) करने के लिए सेट के साथ एक नया स्कीमा निर्दिष्ट करने की कोशिश की:

val new_schema = StructType(df.schema.map { 
    case StructField(n,d,nu,m) => StructField(n,d,true,m) 
}) 

val new_df = spark.read.format("jdbc").schema(new_schema).options(options).load() 

लेकिन तब मुझे मिल गया:

org.apache.spark.sql.AnalysisException: JDBC does not allow user-specified schemas.; 

मैं भी पिछले एक से एक नया Dataframe बनाने की कोशिश की , वांछित स्कीमा निर्दिष्ट करना:

val new_df = df.sqlContext.createDataFrame(df.rdd, new_schema) 

लेकिन मुझे अभी भी एक एनपीई मिला जब एसी लेना डेटा फ्रेम पर टयन।

इस बारे में कोई विचार कि मैं इसे कैसे ठीक कर सकता हूं?

+0

यह समस्या संबंधित प्रतीत होती है जांच कर सकते हैं, लेकिन अभी भी कोई समाधान नहीं प्रदान की जाती है: https://community.teradata.com/t5/Connectivity/Teradata- जेडीबीसी-चालक-रिटर्न-द-गलत-स्कीमा-कॉलम-शून्यता/टीडी-पी/40628 – RaphDG

+0

अरे @RaphDG क्या आपको इसके लिए कोई समाधान मिला। अब मैं इस समस्या के साथ चल रहा हूँ। – Lakshman

+0

@ लक्ष्मण क्या आप संस्करण 2.1.0 का भी उपयोग कर रहे हैं? – stefanobaghino

उत्तर

1

मैं आखिर अनुसंधान मैं अपने Teradata जार (terajdbc4.jar और tdgssconfig.jar) 16.20.00.04 को संस्करण अद्यतन और

teradata.connection.url=jdbc:teradata://hostname.some.com/ 
TMODE=ANSI,CHARSET=UTF8,TYPE=FASTEXPORT,COLUMN_NAME=ON,MAYBENULL=ON 
को Teradata यूआरएल बदल यह, Teradata नवीनतम संस्करण जार में हल हो गई है लगता है

के बाद मैं teradta यूआरएल गुण स्तंभ = पर, MAYBENULL = जोड़ा

पर अब सब कुछ ठीक काम कर रहा है यह काम कर रहा है।

आप संदर्भ दस्तावेज यहां

https://developer.teradata.com/doc/connectivity/jdbc/reference/current/jdbcug_chapter_2.html#2403_2403ch022113