现在的spark sql编程通常使用scala api 以及 java api的方式,相比于直接使用 spark sql语句,spark api灵活很多,毕竟可以基于dataset以及rdd两种方式进行操作,不过spark sql的坑就有点多了。

1,getClass.getResourceAsStream这个类,网上通常说的是不加"/"是从当前包读取,加了"/"是从根class路径读取,但是根路径并不是在idea或者文件下看到的诸如src/main/resource/这样的路径,而是最终打包时候生成的jar的时候的格式,在生成jar包的时候resource文件夹下会被展开到根路径下,所以如果要加载resource下的资源,只需要"/资源名"就可以了

2、select crossInfo, split(crossInfo, '|') as jda from tem_test_yy lateral view explode(split(jdaList, '#')) tmpTable as crossInfo

这个语句有bug,返回的结果是

jda1||time1    ["j","d","a","","|","","|","t","i","m","e","",""]
jda1||time1    ["j","d","a","","|","","|","t","i","m","e","",""]
jda2||time2    ["j","d","a","","|","","|","t","i","m","e","",""]
jda3||time3   ["|","j","d","a","","|","","|","t","i","m","e","",""]

主要原因是hive里面|字符要使用转义符号!!,所以正确用法是split(crossInfo, '\\|');

3、spark persist不能乱用,尤其是

MEMORY_AND_DISK_SER

级别,对于大表来说,persist效率远不如多执行一遍。。对于几十亿级别的表,效率可降低数倍。。

4、dataframe = dataset[row]  ,spark map里面的匿名函数返回值不能是dataset[row],否则会报序列化错误,它只支持dataset[class]的形式,需要在返回以后 在driver端通过 dataset[row].toDF()转成 dataframe也就是dataset[row]才行。但是dataset[row]可以作为map的输入。

5、scala selet("_1.*")和select($"_1"),如果处理的是Tuple[_1,_2]类型的dataset,

后者会生成如下的schema

|-- _1: struct (nullable = true)
| |-- all_jda: string (nullable = true)
| |-- user_visit_ip: string (nullable = true)
| |-- sequence_num: integer (nullable = true)

前者是生成如下的schema

 | -- all_jda: string (nullable = true)
| -- user_visit_ip: string (nullable = true)
| -- sequence_num: integer (nullable = true)

这绝对是一个坑=。=,后者会把多一层schema结构,而在spark sql语句中是能直接取到非顶层的列的。。

6、spark sql的一些问题

(1), hive支持使用正则语句,spark sql 不支持
(2), left out join on A.column = B.column 而不能写成 left out join on column;
(3),  select * from A left out join B on cloumn会造成ambigious错误 需要小心
(4),  concat_ws不支持对除String外的其他类型数组的连接,需要自己实现一个udf

Spark SQL历险记的更多相关文章

  1. Spark SQL 之 Data Sources

    #Spark SQL 之 Data Sources 转载请注明出处:http://www.cnblogs.com/BYRans/ 数据源(Data Source) Spark SQL的DataFram ...

  2. Spark SQL 之 DataFrame

    Spark SQL 之 DataFrame 转载请注明出处:http://www.cnblogs.com/BYRans/ 概述(Overview) Spark SQL是Spark的一个组件,用于结构化 ...

  3. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  4. Spark 官方文档(5)——Spark SQL,DataFrames和Datasets 指南

    Spark版本:1.6.2 概览 Spark SQL用于处理结构化数据,与Spark RDD API不同,它提供更多关于数据结构信息和计算任务运行信息的接口,Spark SQL内部使用这些额外的信息完 ...

  5. Spark SQL Example

     Spark SQL Example This example demonstrates how to use sqlContext.sql to create and load a table ...

  6. 通过Spark SQL关联查询两个HDFS上的文件操作

    order_created.txt   订单编号  订单创建时间 -- :: -- :: -- :: -- :: -- :: order_picked.txt   订单编号  订单提取时间 -- :: ...

  7. Spark SQL 之 Migration Guide

    Spark SQL 之 Migration Guide 支持的Hive功能 转载请注明出处:http://www.cnblogs.com/BYRans/ Migration Guide 与Hive的兼 ...

  8. Spark SQL 官方文档-中文翻译

    Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...

  9. Spark SQL 之 Performance Tuning & Distributed SQL Engine

    Spark SQL 之 Performance Tuning & Distributed SQL Engine 转载请注明出处:http://www.cnblogs.com/BYRans/ 缓 ...

随机推荐

  1. 编辑技巧分享如何给PDF添加注释

    纸质的文件想要添加注释就直接拿笔在上面添加就好了,那么电子文件要怎么添加注释呢,今天小编就以我们现在经常使用到的PDF文档来为大家分享怎么添加注释.   1. 我们需要在百度中搜索并下载并安装一款PD ...

  2. Excel 恢复默认行高、列宽

    操作系统:Windows 10 x64 工具1:Excel 乱糟糟的! 选中需要调整的区域,选择菜单:开始 > 格式 > 自动调整行高 选中需要调整的区域,选择菜单:开始 > 格式 ...

  3. vs2017 winform打包

    如果没有Visual Studio Installer 说明没有安装打包插件 安装打包插件:Microsoft Visual Studio 2017 Installer Projects 工具 --& ...

  4. 你好!酷痞Coolpy 之 Linux篇

    欢迎你进入酷痞的物联网世界.这里有着自由的空气和自然的气息.接下来我将告诉你如果一步步建立一个自己专属的物联网平台. 由于目前的酷痞的官方域名还没有通过备案所以现在用临时域名解说本说明. 最终酷痞的官 ...

  5. 理解WidowManager

    --摘自<Android进阶解密> *WindowManger的关联类* 1.Window是一个抽象类,具体的实现类为PhoneWindow,它对View进行管理.WindowManage ...

  6. arp_spoof脚本的编写

    协议包分析 ARP原理: 在PC1 访问 Server 的流量 要经过网关  也就是 192.168.1.254 欺骗原理:pc1  与 网关 建立 MAC  ARP 缓存 我们将KALI 攻击机的 ...

  7. datatables隐藏列与createdRow渲染bootstrapSwitch形成的BUG

    背景: 昨天写了一个页面用于规则库的增删改查. 数据使用datatables渲染,后端返回数据由前端进行一次性渲染和分页. 隐藏列: 排序的ID不展示,但是排序又想按照ID来排,所以把ID单独作为一列 ...

  8. SpringCloud使用Nacos服务发现实现远程调用

    本文使用SpringCloud结合Nacos服务发现,Feign远程调用做一个简单的Demo. 1 Nacos 关于Nacos之前写了两篇文章关于SpringBoot对它的使用,感兴趣可以查看一下. ...

  9. 2019-2-14SQLserver中function函数和存储过程、触发器、CURSOR

    Sqlserver 自定义函数 Function使用介绍 前言:         在SQL server中不仅可以可以使用系统自带的函数(时间函数.聚合函数.字符串函数等等),还可以根据需要自定义函数 ...

  10. 《Ray Tracing in One Weekend》、《Ray Tracing from the Ground Up》读后感以及光线追踪学习推荐

    <Ray Tracing in One Weekend> 优点: 相对简单易懂 渲染效果相当好 代码简短,只看书上的代码就可以写出完整的程序,而且Github上的代码是将基类与之类写在一起 ...