逗人, 我是SparK Scala的新手,并且, 我有一个两列的DF:“UG”和“Counts”,我喜欢获得第三列 如何在这个列表中公开。
我需要添加一个名为“CUG”的新列,第三个是暴露的,其中CUG(i)是UG中字符串(i)出现在整个列中的次数。
我尝试了以下方案:
将DF与df中的上一个表格相同。我做了一个sql UDF函数来计算字符串出现在“UG”列中的次数,即:
val NW1 = (w1:String) => {
df.filter($"UG".like(w1.substring(1,(w1.length-1))).count()
}:Long
val sqlfunc = udf(NW1)
val df2= df.withColumn("CUG",sqlfunc(col("UG")))
但是当我尝试时,...... 它没有工作。我获得了Null Point异常的错误。 UDF计划是孤立的,但在DF中没有。 如何使用DF获取询问结果。
先谢谢。 JM3
答案 0 :(得分:0)
所以你可以做的是首先计算按UG列分组的行数,它给出你需要的第三列,然后加入原始数据帧。如果需要,可以使用withColumnRenamed
函数重命名列名称。
scala> import org.apache.spark.sql.functions._
scala> myDf.show()
+----+------+
| UG|Counts|
+----+------+
| of| 12|
| of| 23|
| the| 134|
|love| 68|
|pain| 3|
| the| 18|
|love| 100|
| of| 23|
| the| 12|
| of| 11|
+----+------+
scala> myDf.join(myDf.groupBy("UG").count().withColumnRenamed("count", "CUG"), "UG").show()
+----+------+---+
| UG|Counts|CUG|
+----+------+---+
| of| 12| 4|
| of| 23| 4|
| the| 134| 3|
|love| 68| 2|
|pain| 3| 1|
| the| 18| 3|
|love| 100| 2|
| of| 23| 4|
| the| 12| 3|
| of| 11| 4|
+----+------+---+