【问题标题】:Spark Scala DF. add a new Column to DF based in processing of some rows of the same columnSpark Scala DF。根据对同一列的某些行的处理,向 DF 添加一个新列
【发布时间】:2016-09-03 08:30:16
【问题描述】:

亲爱的, 我是 Spark Scala 的新手,而且, 我有两列的 DF:“UG”和“Counts”,我想获得第三 在这个列表中是如何暴露的。

DF:UG、计数、CUG(列)

  • 共 12 4 个
  • 的 23 4
  • 134 3
  • 爱68 2
  • 疼痛 3 1
  • 18 3
  • 爱100 2
  • 23 4
  • 12 3
  • 11 4

我需要添加一个名为“CUG”的新列,第三个暴露出来,其中CUG(i)是UG中的string(i)在整个Column中出现的次数。

我尝试了以下方案:

像 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")))

但是当我尝试时,......它没有工作。我得到一个空点异常的错误。 UDF 方案是独立工作的,但在 DF 中不是。 我可以做些什么来使用 DF 获得询问的结果。

提前致谢。 jm3

【问题讨论】:

    标签: scala apache-spark dataframe calculated-columns udf


    【解决方案1】:

    所以你可以做的是首先计算你需要的第三列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|
    +----+------+---+
    

    【讨论】:

      猜你喜欢
      • 2020-04-06
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 2020-12-29
      相关资源
      最近更新 更多