簡體   English   中英

使用 rlike 和 list 創建新的 df scala

[英]Using rlike with list to create new df scala

兩天前剛從 scala 開始。

事情是這樣的,我有一個 df 和一個列表。 df 包含兩列:段落和作者,列表包含單詞(字符串)。 我需要計算作者出現列表中每個單詞的所有段落的計數。

到目前為止,我的想法是在列表上創建一個 for 循環以使用 rlike 查詢 df 並創建一個新的 df,但即使這確實有效,我也不知道該怎么做。 任何幫助表示贊賞!

編輯:添加示例數據和預期的 output

// Example df and list
val df = Seq(("auth1", "some text word1"), ("auth2","some text word2"),("auth3", "more text word1").toDF("a","t")

df.show

+-------+---------------+
|      a|              t|
+-------+---------------+
|auth1  |some text word1|
|auth2  |some text word2|
|auth1  |more text word1|
+-------+---------------+
    
val list = List("word1", "word2")
    
// Expected output

 newDF.show

+-------+-----+----------+
|   word|    a|text count|
+-------+-----+----------+
|word1  |auth1|         2|
|word2  |auth2|         1|
+-------+-----+----------+

您可以對列表中的每個單詞進行過濾和聚合,並使用unionAll組合所有生成的數據幀:

val result = list.map(word => 
    df.filter(df("t").rlike(s"\\b${word}\\b"))
      .groupBy("a")
      .agg(lit(word).as("word"), count(lit(1)).as("text count"))
).reduce(_ unionAll _)

result.show
+-----+-----+----------+
|    a| word|text count|
+-----+-----+----------+
|auth3|word1|         1|
|auth1|word1|         1|
|auth2|word2|         1|
+-----+-----+----------+

暫無
暫無

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

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