gpt4 book ai didi

scala - 计算spark中数字列的第一个四分位数

转载 作者:行者123 更新时间:2023-12-04 11:38:02 25 4
gpt4 key购买 nike

我是 spark/scala 的新手。这就是我为计算 csv 文件的第一个四分位数所做的工作

val column= sc.textFile("test.txt").map(_.split(",")(2)).flatMap(_.split(",")).map((_.toDouble))
val total = column.count.toDouble
val upper=(total+1)/4
val upper2= scala.math.ceil(upper).toInt

除了添加键值对之外,我不太确定如何对列进行排序。
我所需要的只是在排序后取四分位数的最后 2 个值。但我被迫创建一个键值对。
val quartiles = column.map((_,1)).sortByKey(true).take(upper2)
val first_quartile =0
if(upper % upper.toInt >0){
first_quartile = quartiles(upper.toInt-1)
}else{
first_quartile = (quartiles(upper2-1) +(quartiles(upper2-2))/2
}

这有效,但它会给我留下一个烦人的键值对。我如何恢复到 1 列,而不是 2 列(例如键值对)

最佳答案

只是我自己在做这个。我开始编写一个函数来计算中位数,但发现通过将我的 RDD 转换为 DataFrame 并使用 SQL 查询它可以更快、更容易地获得分位数。这是一个独立的示例:

  // construct example RDD
val rows = Seq(3, 1, 5, 1, 9, 2, 2)
val rdd = sc.parallelize(rows)

// construct Dataframe
case class MedianDF(value: Long)
val df = rdd.map(row => MedianDF(row.toLong)).toDF

// register the table and then query for your desired percentile
df.registerTempTable("table")
sqlContext.sql("SELECT PERCENTILE(value, 0.5) FROM table").show()

其中返回 2,中位数。同样,如果您想要第一个四分位数,只需将 0.25 传递给 PERCENTILE:
sqlContext.sql("SELECT PERCENTILE(value, 0.25) FROM table").show()

关于scala - 计算spark中数字列的第一个四分位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com