2016-05-02 84 views
-1

我有一個JSON文件加載到Spark羣集中。我想根據幾列標識所有重複記錄,並將它們寫入RDD。我嘗試使用Spark SQL,但無法完成任務。從多列中的臨時表中選擇重複項

+0

您能否提供更多信息?可能是JSON模式,你在尋找什麼字段 – Rakshith

+0

你可以說明目的,因爲可能有其他方法。 你可以排序(https://spark.apache.org/docs/1.6.1/api/java/org/apache/spark/sql/DataFrame.html#sort(org.apache.spark.sql.Column .. 。))並遍歷 – Ashish

回答

0

我不明白你是什麼意思,通過識別重複。如果數據是基於架構的,正如您所提到的,可以從Spark SQL獲得幫助。將其轉換爲DataFrame,如果您只是想從組中刪除重複項,請嘗試以下操作。 df.dropDuplicates(List("colA" , "colB"))

+0

我想選擇重複項而不是刪除它們。我想要一個地方來存儲我所有的重複記錄。 –

0

假設你有兩列(「列1」和「列2」),您可以用它來找到,如果記錄是重複的,你可以試試下面的(使用星火SQL):

val newData = data 
    .groupBy("column1", "column2") 
    .agg(count("*").as("cnt")) 
    .where(col("cnt") > 1) 

如果你需要的所有列,可以與原始數據合併產生的數據框:

val finalData = newData.join(data, Seq("column1", "column2")) 

編輯:

或者,如果您有HiveContext,則可以使用窗口功能:

import org.apache.spark.sql.expressions.Window 
val newData = data 
    .withColumn("cnt", count("*").over(Window.partitionBy("column1", "column2")) 
    .where(col("cnt") > 1)