2017-12-20 8 views
0

私のスキーマのIPアドレスを表すフィールドがあります。私はBinary Typeを使ってデータを保存したいと思います。Spark sqlのバイナリタイプによるフィルタリング

私のIPアドレスが50.100.150.200の場合は、[50,100,150,200]として保存します(シーケンスは重要ですが、この質問の議論から除外することができます)。

私の質問は、この列でフィルタリングする方法ですか?私は次のクエリを実行したい例えば

を(文字列は、実際の目的に適合していません):ここでは

SELECT * from table1 WHERE sourceip='50.100.150.200' 

は、問題を示すために、コードの一部です:

Bean定義(のためのスキーマ作成):

public static class MyBean1 implements Serializable { 
    private static final long serialVersionUID = 1L; 
    private int id; 
    private String name; 
    private byte[] description; 

    public MyBean1(int id, String name, String description) { 
     this.id = id; 
     this.name = name; 
     this.description = description.getBytes(); 
    } 

    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public byte[] getDescription() { 
     return description; 
    } 
    public void setDescription(byte[] description) { 
     this.description = description; 
    } 
} 

デモコード(私が説明によってフィルタリングする):

List<MyBean1> newDebugData = new ArrayList<MyBean1>(); 
    newDebugData.add(new MyBean1(1, "Arnold", "10.150.15.10")); 
    newDebugData.add(new MyBean1(1, "Bob", "10.150.15.11")); 
    newDebugData.add(new MyBean1(3, "Bob", "10.150.15.12")); 
    newDebugData.add(new MyBean1(3, "Bob", "10.150.15.13")); 
    newDebugData.add(new MyBean1(1, "Alice", "10.150.15.14")); 

    Dataset<Row> df2 = sqlContext.createDataFrame(newDebugData, MyBean1.class); 
    df2.createTempView("table1"); 
    sqlContext.sql("select * from table1 where description='10.150.15.14'").show(); 

私はエラーを取得しています:

differing types in '(table1.`description` = CAST('10.150.15.14' AS DOUBLE))' 
+3

再現可能な例を共有できますか? – mtoto

+0

@moto私の編集 –

答えて

0

これは、あなたの質問への答えは100%ではないですが、私はポインタが役立つことを願っています。

次の質問は、フィルタリングについてではなく、配列からデータを選択することです。 selecting a range of elements in an array spark sql

Spark SQLを使用して配列を照会するUDFに関するいくつかのガイダンスをはじめ、多くの情報があるようです。

これが役に立ちます。

+0

thxのチップをご覧ください、実際に私は研究中にこの答えを見ました。 usecaseの私の編集を見てください –