2016-07-11 8 views
-1

Mit Spark 1.5.1 mit Spark-Cassandra-Connector-Java und dem Spark SQL DataFrame Apis, was ist der beste Weg, um String-Spalten, die kleiner oder größer als eine gegebene Länge sind, herauszufiltern?Wie kann eine Spalte in einem Spark DataFrame (Java) basierend auf der Länge der Spalte reduziert/gefiltert werden?

Ich versuche, so etwas wie dieses

DataFrame df = context.sql("select key from mytable where key is not null") 
DataFrame fdf = df.filter(functions.length(df.col("key").gt(10)))) 

Wie funktioniert das die functions.length (Column) api Arbeit zu tun? Es dauert eine Spalte in und gibt eine Spalte zurück, aber was passiert mit der Länge?

Antwort

0

1) In einer Spalte müssen Sie ein Prädikat anwenden. Ändern Sie also die Klammer

Was dies tut, ist ein Prädikat basierend auf der Spalte Key anwenden. Zuerst ändern wir den Spaltenschlüssel in eine Spalte der Länge (Schlüssel). Grundsätzlich Anwendung der Funktion auf alle Werte in der Spalte

[ "bird", "cat", "mouse" ] -> [ 4, 3, 5 ] 

Dann, da wir haben jetzt eine numerische Spalte wir eine mehr als Prädikat zu dieser Spalte gelten

[ 4 > 10, 3 > 10, 5 > 10 ] -> [ False, False, False ] 

Der boolean verwendet wird, ob das Prädikat zu bestimmen passiert oder schlägt fehl.

2) Warum nicht nur den Scheck in SQL

sqlContext.sql("SELECT * FROM test.common WHERE LENGTH(key) > 10") 

alle Werte Rufen wo die Länge des Schlüssels größer als 10

+0

Danke. Das ist sehr hilfreich. Ich hatte in diesem [Link] {https://docs.datastax.com/en/datastax_enterprise/4.8/datastax_enterprise/spark/sparkSqlSupportedSyntax.html} auf die DataStax-Dokumentation verwiesen und dort das LENGTH-Schlüsselwort/die LENGTH-Funktion nicht aufgeführt. Beide Alternativen funktionieren, aber ich habe das Beispiel für diesen Beitrag vereinfacht, also muss ich das Beispiel mit der Filterfunktion verwenden. – Joe