簡體   English   中英

如何在Spark中合並一列記錄?

[英]How to concat one column records in spark?

我有2列,並且想將兩者都連接起來,下面是一小組數據:

ID         Comments

32412     CLOSE AS NORMAL
32412     UNDER REVIEW 

我希望它如下,所以基本上視圖是按ID分組並連接注釋。

ID      Comments

32412  CLOSE AS NORMAL
       UNDER REVIEW

另一種無需使用SQL查詢的方式:

import scala.collection.mutable

val myUDF = udf[String, mutable.WrappedArray[String]](_.mkString(" "))
df.groupBy($"id")
  .agg(collect_list("comments").as("comments"))
  .withColumn("comments", myUDF($"comments"))
  .show()

它也需要HiveContext作為SQLContext

您可以為此使用UDF(用戶定義的函數)。 假設您有一個名為dfDataFrame數據,則可以嘗試如下操作:

import scala.collection.mutable
sqlContext.udf.register("ArrayToString",(a: mutable.WrappedArray[String]) => a.mkString("\n"))
df.registerTempTable("IDsAndComments")
val new_df = sqlContext.sql("WITH Data AS (SELECT ID, collect_list(Comments) AS cmnts FROM IDsAndComments GROUP BY ID) SELECT ID, ArrayToString(cmnts) AS Comments FROM Data")

此處發生的是,您為sqlContext定義了一個新函數,以便在解析SQL代碼時使用。 此函數采用WrappedArray (這是您從Spark的DataFrames獲得的數組的類型),並將其轉換為字符串,在該字符串中,數組的每個元素都由新行分隔。

collect_list是一個函數,它返回其分組的值的數組。 請注意,這是一個HiveContext函數,因此您需要sqlContext才能成為HiveContext

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM