Spark 如何快速准确的查询 spark.api使用方式

背景

        今天在做一个spark dataset练习的时候,遇到一个agg聚合函数,但是怎么用,都编译不过,然后百度啥的给的也不权威,最后找到一个spark官方的api网站,有较为详细的使用介绍。


正文


网站

    网址: http://spark.apache.org/docs/2.2.1/api/java/allclasses-noframe.html

    网站截图:

搜索类别,点击进入详情:


 select的使用举例:



举例

val personsDF =  spark.read.json("/data/wangqi/people.json")
    val personScoreDF = spark.read.json("/data/wangqi/peopleScores.json")
    case class Person(name:String,age:Long)

    //prac
    val personDSGrouped = personsDF.groupBy("name","age").count().show()
    personsDF.groupBy("name","age").agg(concat($"name",$"age")).show()

如上agg函数,是dataframe.agg() 内部使用了内置函数concat,concat()内部只填列名就行了,但是将dataframe转换成dataset之后,就不行了:

import  spark.implicits._
    import org.apache.spark.sql.functions._
	val personsDF =  spark.read.json("/data/wangqi/people.json")
    val personScoreDF = spark.read.json("/data/wangqi/peopleScores.json")
    case class Person(name:String,age:Long)
    case class Score(n:String,score:Long)
    val personsDS = personsDF.as[Person]

    val personScoresDS = personScoreDF.as[Score]

    //dataset 强类型
    personsDS.groupBy($"name",$"age").count().show()
    personsDS.groupBy($"name",$"age").agg(concat($"name",$"age"))
我看了一下dataset.agg 要求的参数类型如下:

typedcolumn类型的参数,然后我就到上面提到的文章中,到dataset类,搜到了一个类似的使用用例:


其实就是因为,我的dataset是转换过类型的,不是dataset[Row],而是dataset[Persion],所以选择列的时候要附带类型信息。修改代码以后如下,添加as[String]类型信息:

personsDS.groupBy($"name",$"age").agg(concat($"name",$"age").as[String])

总结

      相对于百度必应搜索得到的资料,版本和权威性都无法保证,不如直接到spark提供的权威网站,而且还有丰富的使用样例

猜你喜欢

转载自blog.csdn.net/u013560925/article/details/79867558