2017-12-27 17 views
0

Ich bekomme unter Fehler in Spark (1.6) SQL beim Erstellen einer Tabelle mit Spaltenwert Standard als NULL. Bsp .: Erstellen Sie einen Tabellentest, indem Sie column_a auswählen, NULL als column_b von test_temp;Spark SQL wirft Fehler "java.lang.UnsupportedOperationException: Unbekannter Feldtyp: void"

Dasselbe funktioniert in Hive und erzeugt die Spalte mit dem Datentyp "void".

Ich benutze leere Zeichenfolge anstelle von NULL, um die Ausnahme zu vermeiden und neue Spalte erhalten Zeichenfolge Datentyp.

Gibt es eine bessere Möglichkeit, Nullwerte in der Hive-Tabelle mit Spark Sql einzufügen?

2017-12-26 07:27:59 ERROR StandardImsLogger$:177 - org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.UnsupportedOperationException: Unknown field type: void 
    at org.apache.hadoop.hive.ql.metadata.Hive.createTable(Hive.java:789) 
    at org.apache.hadoop.hive.ql.metadata.Hive.createTable(Hive.java:746) 
    at org.apache.spark.sql.hive.client.ClientWrapper$$anonfun$createTable$1.apply$mcV$sp(ClientWrapper.scala:428) 
    at org.apache.spark.sql.hive.client.ClientWrapper$$anonfun$createTable$1.apply(ClientWrapper.scala:426) 
    at org.apache.spark.sql.hive.client.ClientWrapper$$anonfun$createTable$1.apply(ClientWrapper.scala:426) 
    at org.apache.spark.sql.hive.client.ClientWrapper$$anonfun$withHiveState$1.apply(ClientWrapper.scala:293) 
    at org.apache.spark.sql.hive.client.ClientWrapper.liftedTree1$1(ClientWrapper.scala:239) 
    at org.apache.spark.sql.hive.client.ClientWrapper.retryLocked(ClientWrapper.scala:238) 
    at org.apache.spark.sql.hive.client.ClientWrapper.withHiveState(ClientWrapper.scala:281) 
    at org.apache.spark.sql.hive.client.ClientWrapper.createTable(ClientWrapper.scala:426) 
    at org.apache.spark.sql.hive.execution.CreateTableAsSelect.metastoreRelation$lzycompute$1(CreateTableAsSelect.scala:72) 
    at org.apache.spark.sql.hive.execution.CreateTableAsSelect.metastoreRelation$1(CreateTableAsSelect.scala:47) 
    at org.apache.spark.sql.hive.execution.CreateTableAsSelect.run(CreateTableAsSelect.scala:89) 
    at org.apache.spark.sql.execution.ExecutedCommand.sideEffectResult$lzycompute(commands.scala:58) 
    at org.apache.spark.sql.execution.ExecutedCommand.sideEffectResult(commands.scala:56) 
    at org.apache.spark.sql.execution.ExecutedCommand.doExecute(commands.scala:70) 
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:132) 
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:130) 
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:150) 
    at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:130) 
    at org.apache.spark.sql.execution.QueryExecution.toRdd$lzycompute(QueryExecution.scala:56) 
    at org.apache.spark.sql.execution.QueryExecution.toRdd(QueryExecution.scala:56) 
    at org.apache.spark.sql.DataFrame.withCallback(DataFrame.scala:153) 
    at org.apache.spark.sql.DataFrame.<init>(DataFrame.scala:145) 
    at org.apache.spark.sql.DataFrame.<init>(DataFrame.scala:130) 
    at org.apache.spark.sql.DataFrame$.apply(DataFrame.scala:52) 
    at org.apache.spark.sql.SQLContext.sql(SQLContext.scala:829) 
+1

'wählen Sie Cast (NULL als String)'? – philantrovert

+0

Danke @philantrovert. Es funktionierte –

Antwort

1

konnte ich nicht viele Informationen über den Datentyp void finden, aber es sieht aus wie es etwas entspricht den Any Datentyp wir in Scala haben ist. Die Tabelle at the end of this page erklärt, dass ein void in einen anderen Datentyp umgewandelt werden kann.

Hier sind einige JIRA Fragen, die irgendwie ähnlich sind, das Problem, das Sie mit Blick auf

So, wie im Kommentar erwähnt, statt NULL können Sie werfen es zu einem der impliziten Datentypen.

select cast(NULL as string) as column_b 
Verwandte Themen