2017-02-04 9 views
0

私のテーブルはほとんどダブルタイプのカラムといくつかのストリングカラムを持っています。私は、行形式serde を使ってテーブルを作成しました。 私はまずnamed_struct関数を使ってこれらの列を結合し、それを私のudfに渡します。このようなもの。ハイブUdf、構造型は型情報を失います。とにかくタイプ情報を回復するには

select id, my_udf(named_struct("key1", col1, "key2", col2, "key3",col3, "key4", col4), other_udf_param1, other_udf_param2); 

ので、COL1、COL2とCOL3は、double型のものであり、COL4はString型です。

しかし、それらはすべてStringとして変換されます。

これは私の評価機能のスニペットです。

List<? extends StructField> fields = this.dataOI.getAllStructFieldRefs(); 

    for (int i = 0; i < fields.size(); i++) { 
     System.out.println(fields.get(i).toString()); 
     String canName = this.featuresOI.getStructFieldData(arguments[2].get(), fields.get(i)).getClass().getCanonicalName(); 
     System.out.println(canName + " can name"); 
     System.out.println(this.dataOI.getStructFieldData(arguments[2].get(), fields.get(i))); 
       } 

これは、すべてを文字列として返します。

列の種類を保持できる方法はありますか?

答えて

0

はい、列の種類はオブジェクトインスペクタのフィールドに保持されます。同じ振る舞いは、named_structのハイブcli上でオーバーレイすることができますが、マップの入力はすべて文字列に変換されます。

関連する問題