spark 的 approxQuantile 问题,无法识别 List<String>
Posted
技术标签:
【中文标题】spark 的 approxQuantile 问题,无法识别 List<String>【英文标题】:Issue with approxQuantile of spark , not recognizing List<String> 【发布时间】:2020-03-05 16:38:23 【问题描述】:我在 java8 项目中使用 spark-sql-2.4.1v。
我需要计算以下给定数据框df
的某些(计算的)列(即con_dist_1
、con_dist_2
)上的分位数:
+----+---------+-------------+----------+-----------+
| id| date| revenue |con_dist_1| con_dist_2|
+----+---------+-------------+----------+-----------+
| 10|1/15/2018| 0.010680705| 6|0.019875458|
| 10|1/15/2018| 0.006628853| 4|0.816039063|
| 10|1/15/2018| 0.01378215| 4|0.082049528|
| 10|1/15/2018| 0.010680705| 6|0.019875458|
| 10|1/15/2018| 0.006628853| 4|0.816039063|
| 10|1/15/2018| 0.01378215| 4|0.082049528|
| 10|1/15/2018| 0.010680705| 6|0.019875458|
| 10|1/15/2018| 0.010680705| 6|0.019875458|
| 10|1/15/2018| 0.014933087| 5|0.034681906|
| 10|1/15/2018| 0.014448282| 3|0.082049528|
+----+---------+-------------+----------+-----------+
List<String> calcColmns = Arrays.asList("con_dist_1","con_dist_2")
当我尝试使用approxQuantile
的第一个版本时,即approxQuantile(List<String>, List<Double>, double)
如下
List<List<Double>> quants = df.stat().approxQuantile(calcColmns , Array(0.0,0.1,0.5),0.0);
报错:
类型中的方法approxQuantile(String, double[], double) DataFrameStatFunctions 不适用于参数 (列表、列表、双精度)
这里有什么问题?我在我的eclipseIDE中做这件事。为什么即使我传递了List<String>
,它也不调用List<String>
?
添加了 API 快照:
【问题讨论】:
您在哪里看到 approxQuantile 的定义,它需要两个列表和一个双精度数?我看到的 API 文档讨论了 String、double[] 和 double(这是错误消息所说的)。 @StephenDarlington:approxQuantile
在 Spark 2.2.0 中添加了多个列。
很久没用过Java了,会不会是Array(0.0,0.1,0.5)
的问题?尝试将列表声明为double[] percentiles = 0.0,0.1,0.5;
看看它是否有效。
@Shaido-ReinstateMonica 您应该将其添加为答案——几乎可以肯定是这样。
@BdEngineer:我在这里添加了一个答案,几个小时后会有一些时间来看看这个新问题。
【参考方案1】:
看起来这可能是由于在 approxQuantile
函数的输入中使用了 Array
。最简单的解决方法是对列和百分位数都使用数组(这将使用 API 快照中的第三个 approxQuantile
方法。:
String[] calcColmns = "con_dist_1", "con_dist_2";
double[] percentiles = 0.0,0.1,0.5;
然后调用函数:
double[][] quants = df.stat().approxQuantile(calcColmns, percentiles, 0.0);
【讨论】:
以上是关于spark 的 approxQuantile 问题,无法识别 List<String>的主要内容,如果未能解决你的问题,请参考以下文章
遇到的问题---spark---spark OutOfMemoryError: Java heap space