2017-05-19 48 views
1

我創建拼花文件數據框如下:如何在Spark中打印DataFrame列的唯一值?

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

現在我想打印出一個名爲field1列的所有唯一值。

我知道如果使用Python,可以運行import pandas as pd,然後將data_df轉換爲pandas DataFrame,之後使用unique()

但我怎麼能在Java中做到這一點?

+1

'從myData'(字段1)選擇不同? – philantrovert

+0

@philantrovert:你能否發表你的答案?在大數據集的情況下,您的解決方案可以更好地工作,因爲它不會將所有數據加載到數據框中。它選擇所需的數據。 – Dinosaurius

+0

有人已經發布了它:D btw,你可以嘗試'data_df.select(data_df(「field1))distinct'嗎?這不應該加載整個數據,並且可能因爲spark內部優化而更快。 – philantrovert

回答

2

這是非常簡單的通過

parquetFile.dropDuplicates("field1") 

這使您只有distinct行獲得distinct值,可以使用不同功能的SQL查詢

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

下面是一個例子:

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() 

此給出以下的輸出:

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

希望這有助於,最佳Regrads

1

您可以刪除重複的和field1

1
DataFrame uniqueDF = data_df.groupBy("field1"); 
uniqueDF.show(); 
相關問題