2017-12-27 18 views
0

カラム値defaultをNULLとしてテーブルを作成しているときにSpark(1.6)SQLのエラーが下になりました。例:select column_aとしてテーブルテストを作成し、test_tempからcolumn_bとしてNULLを作成します。Spark SQLのスローエラー「java.lang.UnsupportedOperationException:Unknown field type:void」

同じことがHiveで動作し、データ型が "void"の列が作成されます。

例外を避けるためにNULLの代わりに空の文字列を使用し、文字列データ型を取得する新しい列を使用しています。

spark sqlを使用してハイブテーブルにnull値を挿入する方法はありますか?

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

'select cast(NULL as string)'?ありがとう@philantrovert。 – philantrovert

+0

出来た –

答えて

1

私は、データ型voidに関する多くの情報を見つけることができませんでしたが、それは我々がScalaで持ってAnyデータ型にやや同等であるように見えます。

at the end of this pageは、voidを他のデータ型にキャストできると説明しています。ここで

ではなく、あなたがキャストできNULLのコメントで述べたように、あなたが、そう

に直面している問題にちょっと似ているいくつかのJIRAの問題であり、暗黙的なデータ型のいずれかに変換します。

select cast(NULL as string) as column_b