2016-11-02 15 views
1

私は、配列[Byte]を含むSpark Dataframeを持っています。配列[Byte]とデータを照合するのにisinを使用できますか?私はこのようにそれを使用しようとすると:Spark scala Dataframe isin

clientIp.isin((whitelist:_*))

whitelist:_*が正しくIN(...)にバイト配列をフォーマットしていないとして、それが一致しません。どのようにこれを修正するための任意のアイデア?あなたは、Java StringArray[Byte]に変換することができます

+0

[Byte]をリストに変換して使用できますか? – Shankar

+0

'Array [Byte]をStringに変換することができます。そして、あなたのホワイトリスト' List ' – Shankar

+0

がhttps://spark.apache.org/docs/から' isin(ホワイトリスト:_ * Array [Byte(配列)]を変換できるかぎり、1.6.0/api/java/org/apache/spark/sql/Column.html#isin(scala.collection.Seq)は 'java.lang.object'のシーケンスを受け取ります。 ] 'をjava.lang.objectの何らかの形に変換すると、うまくいくはずです。 – Shankar

答えて

2

、その後、あなたはホワイトリスト場合isin(whitelist:_*)でドキュメントを1としてList<String>

これを一致させることができ、isin方法は、java.lang.Objectのを受け入れるかSeq(java.lang.object)

https://spark.apache.org/docs/1.6.0/api/java/org/apache/spark/sql/Column.html#isin(scala.collection.Seq)

+0

さて、そうですが、Array [Byte]に大量のデータがあり、変換が非常に遅いです。私はバイトでデータを残し、バイトを比較することを好むだろう – Skoky

1

scala docsによれば、isinメソッドはSeq [String]ではなくvaragsを要求します。データをSeq [String]に変換する場合は、次の操作を実行できます。

df.filter(column_name.isin(seqOfString: _*)) 
関連する問題