Spark Scala 统计 Map Key 中字符串数组的出现次数

Posted

技术标签:

【中文标题】Spark Scala 统计 Map Key 中字符串数组的出现次数【英文标题】:Spark Scala Count the Occurrence of Array of strings in the Map Key 【发布时间】:2017-07-19 22:06:08 【问题描述】:

目前,我有一个数据框,它有两个字段,名称为

id1,              id2
Seq[String]      Map[String,(String,Long,Long)]

我想再创建一个名为 rate 的列,即 id1 中的 id 数量的百分比作为地图的键出现

似乎我无法在 udf 中放置 for 循环,想知道我该怎么做?

【问题讨论】:

你在寻找每个 id 的百分比吗? 【参考方案1】:

使用 Seq.countMap.isDefinedAt 检查 Map 中存在的键的数量,然后简单地用 udf 包装它:

val df = Seq((Seq("a", "b", "c"), Map("a" -> ("x", 1L, 2L), "x" -> ("y", 2L,2L)))).toDF("id1", "id2")

type CustMap = Map[String, (String, Long, Long)]

def percent_in = udf(
    (id1: Seq[String], id2: CustMap) => id1.count(id2.isDefinedAt)/id1.length.toDouble
)

df.withColumn("rate", percent_in($"id1", $"id2")).show
+---------+--------------------+------------------+
|      id1|                 id2|              rate|
+---------+--------------------+------------------+
|[a, b, c]|Map(a -> [x,1,2],...|0.3333333333333333|
+---------+--------------------+------------------+

【讨论】:

嗨,该函数工作正常,但是,构造 df 的方式给我一个错误,显示“表达式“ExternalMapToCatalyst_value_isNull19”不是右值”,做了一些研究,但没有那么多人拥有这个问题

以上是关于Spark Scala 统计 Map Key 中字符串数组的出现次数的主要内容,如果未能解决你的问题,请参考以下文章

在 Spark Scala 中使用 map() 重新排序键值对

Spark高级排序与TopN问题揭密

Spark基础-scala学习(集合)

python spark 通过key来统计不同values个数

Spark Dataframe:从 Map 类型生成元组数组

02 使用spark进行词频统计【scala交互】