Искра Скала ДФ. добавить новый столбец в DF на основе обработки некоторых строк одного и того же столбца

Уважаемые, я новичок в SparK Scala, и у меня есть DF из двух столбцов: «UG» и «Counts», и я хотел бы, чтобы третий способ был представлен в этом списке.

DF: UG, Counts, CUG (столбцы)

  • of 12 4
  • of 23 4
  • 134 3
  • любовь 68 2
  • боль 3 1
  • 18 3
  • люблю 100 2
  • of 23 4
  • 12 3
  • of 11 4

Мне нужно добавить новый столбец с именем «CUG», третий открытый столбец, где CUG (i) — это количество раз, когда строка (i) в UG появляется во всем столбце.

Пробовал по следующей схеме:

Имея 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


person José Miguel Méndez Miquel    schedule 08.05.2016    source источник


Ответы (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|
+----+------+---+
person Psidom    schedule 09.05.2016