如何在Spark中打印DataFrame列的唯一值?

时间:2017-05-19 08:43:18

标签: java apache-spark apache-spark-sql

我从Parquet文件创建一个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做呢?

3 个答案:

答案 0 :(得分:2)

非常简单,您可以在SQL查询中使用distinct函数

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|
+------+

希望这个帮助,Best Regrads

答案 1 :(得分:1)

您可以删除重复项并通过

获取distinct
parquetFile.dropDuplicates("field1")

这只为distinct

提供了field1

答案 2 :(得分:1)

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