乐鱼电竞

  • 教育行业A股IPO第一股(股票代码 003032)

    全国咨询/投诉热线:400-618-4000

    怎样操作DataFrame?不同操作风格有什么区别?

    更新时间:2021年04月14日16时00分 来源:乐鱼电竞 浏览次数:

    乐鱼电竞-一样的教育,不一样的品质

    DataFrame提供了两种语法风格,即DSL风格语法和SQL风格语法,二者在功能上并无区别,仅仅是根据用户习惯,自定义选择操作方式。接下来,我们通过两种语法风格,分别讲解DataFrame操作的具体方法。

    1.DSL风格操作

    DataFrame提供了一个领域特定语言(DSL)以方便操作结构化数据,下面将针对DSL操作风格,讲解DataFrame常用操作示例。

    show():查看DataFrame中的具体内容信息。printSchema():查看DataFrame的Schema信息。select():查看DataFrame中选取部分列的数据。

    下面演示查看personDF对象的name字段数据,具体代码如下所示。

    scala > personDF.select(personDF.col("name")).show()
    +--------+|  name |
    +--------+|zhangsan|
    |   lisi|
    | wangwu|
    | zhaoliu|
    | tianqi||  jerry|
    +--------+

    上述代码中,查询name字段的数据还可以直接使用“personDF.select(“name”).show”代码直接查询。

    select()操作还可以实现对列名进行重命名,具体代码如下所示。

    scala > personDF.select(personDF("name").as("username"),
    personDF("age")).show()
    +--------+---+
    |username|age|
    +--------+---+
    |zhangsan| 20|
    |  lisi| 29|
    | wangwu| 25|
    | zhaoliu| 30|
    | tianqi| 35|
    |  jerry| 40|
    +--------+---+

    从返回结果看出,原name字段重命名为username字段。

    filter():实现条件查询,过滤出想要的结果。

    下面演示过滤age大于等于25的数据,具体代码如下所示。

    从上述返回结果可以看出,成功过滤出符合大于等于25岁的条件数据。

    groupBy():对记录进行分组。

    下面演示按年龄进行分组并统计相同年龄的人数,具体代码如下所示。

    scala > personDF.groupBy("age").count().show()
    +---+-----+
    |age|count|
    +---+-----+
    | 20|  1|
    | 40|  1|
    | 35|  1|
    | 25|  1|
    | 29|  1|
    | 30|  1|
    +---+-----+

    从上述返回结果看出,groupBy()成功统计相同年龄的人数信息。

    sort():对特定字段进行排序操作。

    下面演示按年龄降序排列,具体代码如下所示。

    scala > personDF.sort(personDF("age").desc).show()
    +---+---------+---+
    | id|  name |age|
    +---+---------+---+
    | 6|  jerry | 40|
    | 5|  tianqi  | 35|
    | 4| zhaoliu | 30|
    | 2|  lisi  | 29|
    | 3| wangwu  | 25|
    | 1|zhangsan | 20|
    +---+--------+---+

    从上述返回结果看出,数据成功按照年龄降序排列。

    2.SQL风格操作

    DataFrame的强大之处就是我们可以将它看作是一个关系型数据表,然后可以在程序中直接使用spark.sql()的方式执行SQL查询,结果将作为一个DataFrame返回。使用SQL风格操作的前提是需要将DataFrame注册成一个临时表,代码如下所示。

    scala > personDF.registerTempTable("t_person")

    下面通过多个示例,演示使用SQL风格方式操作DataFrame。

    (1) 查询年龄最大的前两名人的信息,具体执行代码如下所示。

    scala > spark.sql("select * from t_person order by age desc limit 2").show()
    +---+------+---+
    | id| name|age|
    +---+------+---+
    | 6| jerry| 40|
    | 5|tianqi| 35|
    +---+------+---+

    (2) 查询年龄大于25的人的信息,具体代码如下所示。

    scala > spark.sql("select * from t_person where age > 25").show()
    +---+-------+---+
    | id|  name|age|
    +---+-------+---+
    | 2|  lisi| 29|
    | 4|zhaoliu| 30|
    | 5| tianqi| 35|
    | 6| jerry| 40|
    +---+-------+---+

    DataFrame操作方式简单,并且功能强大,熟悉SQL语法的开发者都能够快速地掌握DataFrame的操作,本小节只讲解了部分常用的操作方式,读者可通过Spark官方文档http://spark.apache.org/docs/latest/sql-programming-guide.html详细学习DataFrame的操作方式。

    猜你喜欢:

    DataFrame是什么意思?与RDD相比有哪些优点?

    多种方法创建DataFrame【大数据技术文章】

    怎样操作Spark SQL性能调优?

    乐鱼电竞大数据培训

    0 分享到:
    和我们在线交谈!

    【网站地图】【sitemap】