读取Spark方法sortByKey:
sortByKey([ascending], [numTasks]) When called on a dataset of (K, V) pairs where K implements Ordered, returns a dataset of (K, V) pairs sorted by keys in ascending or descending order, as specified in the boolean ascending argument.
Run Code Online (Sandbox Code Playgroud)
是否可以返回"N"个数量的结果.因此,不要返回所有结果,只返回前10位.我可以将已排序的集合转换为数组并使用take方法,但由于这是一个O(N)操作,是否有更有效的方法?
我需要一个窗口函数,它按一些键(=列名称)进行分区,按另一个列名称进行排序,并返回前x行的行.
这适用于升序:
def getTopX(df: DataFrame, top_x: String, top_key: String, top_value:String): DataFrame ={
val top_keys: List[String] = top_key.split(", ").map(_.trim).toList
val w = Window.partitionBy(top_keys(1),top_keys.drop(1):_*)
.orderBy(top_value)
val rankCondition = "rn < "+top_x.toString
val dfTop = df.withColumn("rn",row_number().over(w))
.where(rankCondition).drop("rn")
return dfTop
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将其更改为第4行orderBy(desc(top_value))或orderBy(top_value.desc)第4行时,我收到语法错误.这里的语法是什么?
我正在使用spark会话读取文件,然后拆分单词并计算单词的迭代次数.我需要以desc顺序显示数据
SparkSession sparkSession = SparkSession
.builder()
.appName("Java Spark SQL basic example")
.config("spark.master", "local")
.getOrCreate();
JavaRDD<Word> textFile = sparkSession
.read()
.textFile("/Users/myname/Documents/README.txt")
.javaRDD()
.flatMap(s -> Arrays.asList(s.split("[\\s.]")).iterator())
.map(w -> {
Word word = new Word();
word.setWord(w.replace(",", ""));
return word;
});
Dataset<Row> df = sparkSession.createDataFrame(textFile, Word.class);
df.groupBy("word").count().orderBy(org.apache.spark.sql.functions.col("count").desc()).show();
Run Code Online (Sandbox Code Playgroud)
当我使用org.apache.spark.sql.functions.col("count")它时工作正常但无法按照https://spark.apache.org/docs/2.1.1/api/java/org/apache/spark/sql/functions.html#desc( java.lang.String中)
df.sort(asc("dept"), desc("age"))
还有如何在Spark SQL中按降序排序列? 没用.我想这是斯卡拉.Java中的等价物是什么?