0
私は次のように定義されたHiveのテーブルを持っている:はBIGINTとINT比較障害
create table testforerror (
my_column MAP<BIGINT, ARRAY<String>>
);
テーブル持って次のレコード
hive> select * from testforerror;
OK
{16001:["0034000000a4WDAAA2"]}
{16001:["0034000000orWiFAAU"]}
{16001:["","0034000000VgrHdAAJ"]}
{16001:["0034000000cS4tDAAS"]}
{15001:["0037000001a7ofgAAA"]}
Time taken: 0.067 seconds, Fetched: 5 row(s)
Iキーでレコードをフィルタクエリを持っていますmy_columnの
hive> select * from testforerror where my_column[16001] is not null;
OK
{16001:["0034000000a4WDAAA2"]}
{16001:["0034000000orWiFAAU"]}
{16001:["","0034000000VgrHdAAJ"]}
{16001:["0034000000cS4tDAAS"]}
Time taken: 2.224 seconds, Fetched: 4 row(s)
をしかし、私はエラーを取得するしかし、スパークsqlContextから実行しようとしたとき:このクエリは、ハイブ/ビーラインシェルから罰金を実行すると、次のレコードを産れ
select * from testforerror where my_column[16001] is not null;
を次のようにクエリがあります。以下は、エラーメッセージです。
scala> val errorquery = "select * from testforerror where my_column[16001] is not null"
errorquery: String = select * from testforerror where my_column[16001] is not null
scala> sqlContext.sql(errorquery).show()
org.apache.spark.sql.AnalysisException: cannot resolve 'my_column[16001]' due to data type mismatch: argument 2 requires bigint type, however, '16001' is of int type.; line 1 pos 43
at org.apache.spark.sql.catalyst.analysis.package$AnalysisErrorAt.failAnalysis(package.scala:42)
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1$$anonfun$apply$2.applyOrElse(CheckAnalysis.scala:65)
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1$$anonfun$apply$2.applyOrElse(CheckAnalysis.scala:57)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:335)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:335)
at org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:69)
at org.apache.spark.sql.catalyst.trees.TreeNode.transformUp(TreeNode.scala:334)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$5.apply(TreeNode.scala:332)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$5.apply(TreeNode.scala:332)
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$4.apply(TreeNode.scala:281)
at scala.collection.Iterator$$anon$11.next(Iterator.scala:328)
at scala.collection.Iterator$class.foreach(Iterator.scala:727)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
at scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala:48)
at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:103)
at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:47)
すべてのポインタは非常に有用です、ありがとう。
これは役立つだろうが、私のクエリは非常に複雑であると私は詳細をマスクしようとしたとして、私はDSLに切り替えることはできません。ありがとう。 –
私はもう別のオプションがあるとは思わない。あなたは[JIRA](https://issues.apache.org/jira/browse/SPARK)を開く必要があります。 – zero323