私のスキーマの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))'
再現可能な例を共有できますか? – mtoto
@moto私の編集 –