关于火花数据帧操作的问题 - 类别统计

时间:2018-01-25 09:34:21

标签: scala apache-spark dataframe

我想在key1为1和2时分隔统计信息,key2为1,2,3的数字,然后以表格形式显示。

val df1 = sc.parallelize(List((1, 1), (1, 1), (1, 1), (1, 2),(1, 3), (2, 1), (2, 2), (2, 2))).toDF("key1","key2")
df2.groupBy("key1").groupBy("key2").agg(count("key2")).show()

我想计算key2,其中key1分别为1或2。并添加一个像这样的新col:

List((1, 1,3), (1, 1,3), (1, 1,3), (1, 2,1),(1, 3,1), (2, 1,1), (2, 2,2), (2, 2,2))

新col是key2的num 但那是错的。那我应该编码什么? THX!

1 个答案:

答案 0 :(得分:0)

你的错误在以下一行

$("#mytextarea").mouseup(function() {
  // obtain the object reference for the textarea>
  var txtarea = document.getElementById("mytextarea");
  // obtain the index of the first selected character
  var start = txtarea.selectionStart;
  // obtain the index of the last selected character
 var finish = txtarea.selectionEnd;
  //obtain all Text
  var allText = txtarea.value;

  // obtain the selected text
  var sel = Array(finish - start).join("*");
  //append te text;
  var newText = allText.substring(0, start) + sel + 
allText.substring(finish, allText.length);
  txtarea.value = newText;

  $('#newpost').offset({
    top: 0,
    left: 0
  }).hide();
})

而不是df2.groupBy("key1").groupBy("key2").agg(count("key2")).show() 您使用了df1而不是在一个df2中合并两列,而是连续使用了两个groupBygroupBy 后应该有聚合

所以工作代码是

groupBy

应该给你

df1.groupBy("key1", "key2").agg(count("key2")).show()

<强>更新

查看更新后的问题,使用+----+----+-----------+ |key1|key2|count(key2)| +----+----+-----------+ | 2| 2| 2| | 1| 2| 1| | 1| 1| 3| | 1| 3| 1| | 2| 1| 1| +----+----+-----------+ 函数应该是必需的解决方案

window

应该给你

import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions._
def windowFunc = Window.partitionBy("key1", "key2")
df1.withColumn("result", count("key2").over(windowFunc)).show()