2017-05-19 1 views
1

Ich erstelle ein Datenrahmen von Parkett-Datei wie folgt:Wie Drucken von eindeutigen Werten einer Spalte von DataFrame in Spark?

DataFrame parquetFile = sqlContext.read().parquet("test_file.parquet"); 
parquetFile.printSchema(); 
parquetFile.registerTempTable("myData"); 
DataFrame data_df = sqlContext.sql("SELECT * FROM myData"); 

Jetzt habe ich alle eindeutigen Werte einer Spalte drucken möchten, die field1 genannt wird.

Ich weiß, dass im Falle der Verwendung von Python, wäre es möglich, import pandas as pd ausführen und dann konvertieren data_df zu Pandas DataFrame, nach denen unique() verwenden.

Aber wie kann ich es in Java tun?

+1

'select distinct (field1) aus myData' ?? – philantrovert

+0

@philantrovert: Könnten Sie bitte Ihre Antwort veröffentlichen? Bei einem großen Dataset funktioniert Ihre Lösung besser, da nicht alle Daten in den Datenrahmen geladen werden. Es wählt die erforderlichen Daten aus. – Dinosaurius

+0

Jemand hat es bereits gepostet: D btw, können Sie versuchen, 'data_df.select (data_df (" field1)). Distinct "? Dies sollte nicht die gesamten Daten als auch laden und könnte schneller sein wegen interner Optimierungen in Spark. – philantrovert

Antwort

2

Es ist sehr einfach, können Sie die bestimmte Funktion in der SQL-Abfrage verwenden

DataFrame data_df = sqlContext.sql("SELECT DISTINCT(field1) FROM myData"); 

Hier ist ein Beispiel:

val myData = Seq("h", "h", "d", "b", "d").toDF("field1") 
myData.createOrReplaceTempView("myData") 
val sqlContext = spark.sqlContext 
sqlContext.sql("SELECT DISTINCT(field1) FROM myData").show() 

dies gibt die folgende Ausgabe:

+------+                   
|field1| 
+------+ 
|  h| 
|  d| 
|  b| 
+------+ 

Hoffnung diese Hilfe, beste Regrads

1

Sie können die doppelte entfernen und distinct Werte erhalten, indem

parquetFile.dropDuplicates("field1") 

Dies gibt Ihnen nur distinct Reihen von field1

1
DataFrame uniqueDF = data_df.groupBy("field1"); 
uniqueDF.show(); 
Verwandte Themen