1
目前字符串数组的发生,我有两个字段一个数据帧,名星火斯卡拉计数在图例
id1, id2
Seq[String] Map[String,(String,Long,Long)]
我想创建一个名字率,这是另一列id1中id数量的百分比作为地图的关键字出现
看来我无法在udf中安装for循环,想知道我应该怎么做?
目前字符串数组的发生,我有两个字段一个数据帧,名星火斯卡拉计数在图例
id1, id2
Seq[String] Map[String,(String,Long,Long)]
我想创建一个名字率,这是另一列id1中id数量的百分比作为地图的关键字出现
看来我无法在udf中安装for循环,想知道我应该怎么做?
使用Seq.count
和Map.isDefinedAt
检查现有的地图键的数量,然后简单地用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“不是一个右值',做了一些研究,但没有那么多人有这个问题 –
你找每一标识百分比? –