打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Spark的Dataset操作(一)

环境说明:

用的版本是Spark 2.1,Dataset操作很丰富,join的支持也蛮好的,比原来用的spark 1.4好用多了。

嗯,Dataset操作,我觉得最重要的是把Column类的用法弄清楚。毕竟,后面的Dataset操作都是在操作列。最好的资料自然是官方文档,Spark的API文档还是挺详细的,而且还细分了Java/Scala/Python。

来个例子边看边说:

scala> val df = spark.createDataset(Seq( ('aaa', 1, 2), ('bbb', 3, 4), ('ccc', 3, 5), ('bbb', 4, 6)) ).toDF('key1','key2','key3')df: org.apache.spark.sql.DataFrame = [key1: string, key2: int ... 1 more field]
scala> df.printSchemaroot |-- key1: string (nullable = true) |-- key2: integer (nullable = false) |-- key3: integer (nullable = false)scala> df.collectres34: Array[org.apache.spark.sql.Row] = Array([aaa,1,2], [bbb,3,4], [ccc,3,5], [bbb,4,6])


上面的代码创建了一个DataFrame,有三列,列名分别是key1, key2, key3, 类型对应string, integer, integer。
当前造了4条记录,如上所示。

接下来看看选择列的几种调用方式:

scala> df.select('key1').collectres49: Array[org.apache.spark.sql.Row] = Array([aaa], [bbb], [ccc], [bbb])scala> df.select($'key1').collectres50: Array[org.apache.spark.sql.Row] = Array([aaa], [bbb], [ccc], [bbb])scala> df.select(df.col('key1')).collectres51: Array[org.apache.spark.sql.Row] = Array([aaa], [bbb], [ccc], [bbb])


select方法中参数直接用字符串只能用DataFrame中的命名字段名。不能对字段名再使用像SQL的select语法的表达式。但是$'key1'这种写法对应的是select方法的Column参数类型重载,可以支持sql的select语法了:

scala> df.select(upper($'key1')).collectres58: Array[org.apache.spark.sql.Row] = Array([AAA], [BBB], [CCC], [BBB])scala> df.select(upper('key1')).collect<console>:27: error: type mismatch; found   : String('key1') required: org.apache.spark.sql.Column       df.select(upper('key1')).collect


上面在select中对字段key1调用了upper函数转换大小写,注意'key1'前面有个$符号,这个是scala最喜欢搞的语法糖,了解下写代码会很方便。而下面没有加$符号在key1前面时就报错了,提示需要的是Column,而当前给的则是个String类型。

这时候的select也可以用selectExtr方法替换。比如下面的调用:

scala> df.selectExpr('upper(key1)', 'key2 as haha2').show+-----------+-----+|upper(key1)|haha2|+-----------+-----+| AAA| 1|| BBB| 3|| CCC| 3|| BBB| 4|+-----------+-----+


key1字段调用了变大写的函数,而key2字段改了别名haha2, ok, 一切顺利!


嗯,先写到这吧,困了。。。回头再接着写~~

喜欢这些内容的话,可以关注下哈~
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Apache 两个开源项目比较:Flink vs Spark
SparkSession简单介绍
理解Spark SQL(三)—— Spark SQL程序举例
大数据IMF传奇行动绝密课程第58课:使用Java和Scala在IDE中开发DataFrame实战
Spark入门:读写Parquet(DataFrame)
理解Spark SQL(二)—— SQLContext和HiveContext
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服