我有这样的数据
id,category,price,description
1,2,59.98,xyz
2,2,129.99,pqr
3,2,89.99,mno
我想使用reduceByKey作为元组按类别检索最小浮点值
我的预期答案应该是这样(2,59.98)
我尝试过这样但它说错误
val minPricedProducts= products.map(x=>(x.split(",")(1).toInt,x.split(",")(2).toFloat)).reduceByKey((a,b)=> if(a._1 < b._1) a else b).map(rec._1)
:33:错误:值_2不是Float的成员
答案 0 :(得分:1)
简短的回答是,这将有效:
val minPricedProducts= products.map{ x =>
val d = x.split(",")
(d(1).toInt,d(2).toFloat)
}.reduceByKey( (a,b) => if(a < b) a else b)
a
和b
不是元组,因为reduceByKey
已经为您提取了元组的值部分,因此您不需要_1
。
请注意,我做了一次拆分,你不希望它做两次,因为它需要两倍的时间和内存。
此外,使用.reduceByKey( (a,b) => Math.min(a,b) )
代替if
可能更具可读性。
我不确定error: value _2 is not a member of Float
_2
时你是怎么得到_1
的
不在您发布的代码中,您的意思是read.csv()
吗?
值得注意的是,有更好的方法可以做到这一点,因为它是一个CSV文件
您可以使用df.groupBy("category").agg(min("price"))
阅读,然后您可以使用VolumeChanged
。