在2.0版本之前,Spark的主要编程接口是RDD(弹性分布式数据集),在2.0之后,则主推Dataset,他与RDD一样是强类型,但更加优化。RDD接口仍然支持,但为了更优性能考虑还是用Dataset的好。

在spark目录中运行bin/spark-shell,或将spark安装目录设为SPARK_HOME环境变量且将其$SPARK_HOME/bin加到PATH中,则以后可在任意目录执行spark-shell即可启动。

RDD可以从Hadoop的InputFormats文档(如hdfs文档)创建,也可读写本地文档,也可由其他RDD经转换而来。Dataset也具有这些性质。以读取文档为例,RDD时代可以在shell中通过sc.textFile(filename)直接读取,在Dataset则需要通过spark.read.textFile(filename)读取。

1. 读取Dataset方式

val dataset = spark.read.textFile(source_path)

其中spark.read返回的是一个DataFrameReader,所以上述方法其加载文本文档并返回一个string的Dataset,这个dataset仅包含单个名为”value”的列。
若文本文档的目录结构包含分区信息,在读到的dataset中也将被忽略,要想将这些分区信息作为schema列信息的话,需要用 大专栏  spark-shell使用指南. - 韩禹的博客text API, 看textFile的实现,
其也是用的text的特殊参数。

1.1 查看内容

dataset.collect().foreach(println) 或者 dataset.take(10).foreach(println)

其中collect返回所有记录,take(n)返回n条记录。

2. 读取Json为dataset并进行select操作

val dataset = spark.read.json(source_path)

spark.read.json可以返回DataFrame形式的数据

val data = dataset.select($"content", $"id", $"time").filter($"id"===01 && $"time"="2019-01-01")

返回 org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] = [content: string, gid: bigint ... 1 more field]

val dataC = data.select(unbase64($"content")).map(s => new String(s.getAs[Array[Byte]](0), "gb2312"))

将content中的base64的内容解码为gb2312

val sample = dataC.take(10).foreach(println)

输出

spark-shell使用指南. - 韩禹的博客的更多相关文章

  1. Linux 桌面玩家指南:05. 发博客必备的图片处理和视频录制神器

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  2. Spark大型电商项目实战-及其改良之番外(1)-将spark前端页面效果高效拷贝至博客

    Spark大型电商项目实战-及其改良这个系列的时间轴展示图一直在变....1-3篇是用图直接表示时间轴,用一段简陋的html代码表示时间表.第4篇开始才是用比较完整的前端效果,能移动.缩放时间轴,鼠标 ...

  3. 企业shell面试题:获取51CTO博客列表倒序排序考试题

    #!/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HTMLFILE=/home/oldboy/ht ...

  4. Writing a Windows Shell Extension(marco cantu的博客)

    Writing a Windows Shell Extension This is a technical article covering the content of my last week s ...

  5. 韩天峰博客 php基础知识学习记录

    http://rango.swoole.com 写好PHP代码真的不容易,给大家几个建议: 慎用全局变量,全局变量不好管理的,会导致你的代码依赖于全局变量,而耦合度太高. 一定不要复制粘贴代码,可重用 ...

  6. C#字符串操作,转自韩迎龙博客

    1.1 字符串大小写 方法原型   string <strName>.ToUpper();  //返回字符串转换的大写形式  string <strName>.ToLower( ...

  7. Kafka 部署指南-好久没有更新博客了

    最近到了一家新公司,很多全新技术栈要理解.每天都在看各类 English Offcial Document,我的宗旨是我既然看懂了,就写下来分享,这是第一篇. 基本需求: 1.已有 zookeeper ...

  8. HTML5中 HTML格式化/HTML样式/链表/表格-样式 韩俊强的博客

    HTML5学习从简单到复杂,循环渐进! 每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 1.HTML格式化 <!DOCTYPE html> <h ...

  9. HTML5中 基本用法及属性 韩俊强的博客

    从今天开始更新H5相关学习:希望大家能一起学习,多学习一门语言,多一门乐趣! 了解Html5: Html5基本属性: <!DOCTYPE html> <html lang=" ...

随机推荐

  1. spring boot 环境配置(profile)切换

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  2. python复习——字符串

    1.字符串:用双引号括起的内容 2.title()——首字母大写:print(变量名.title()) upper()——全部大写:print(变量名.upper()) lower()——全部小写:p ...

  3. 分页助手PageHelper学习

    PageHelper是mybatis的通用分页插件,通过mybatis的拦截器实现分页功能,拦截sql查询请求,添加分页语句, 最终实现分页查询功能.在 springboot上集成pagehelper ...

  4. 2020/2/5 php编程学习

    一事无成的上午..就安了框架解决了一些报错信息 下面简单了解一下 安装一下框架: 什么是路由: 系统从URI(唯一资源定位器)参数中分析出当前请求的分组(平台),控制器和操作方法的过程就是路由. UR ...

  5. [极客大挑战 2019]BabySQL

    0x00 知识点 双写绕过 简单测试一下,发现or在登陆过程被过滤,想到使用oorr试试,结果成了?! 最后多测试一下,发现from union select 这些关键函数都被替换为空 本题直接进行常 ...

  6. swiper用axios异步请求后 循环失效

    解决方案 使用ajax动态获取数据  当数据还没有收到的时候,swiper组件收到的是跟组件data传过来的空数组,会造成渲染问题 这个时候可以给swiper组件 设置一个  v-if='list.l ...

  7. Vue v-bind

    指令作用: 给元素的属性赋值 它是一个 vue 指令,用于绑定 html 属性 写法: 正常写法 <div v-bind:原属性名="变量||"常量""& ...

  8. STL学习顺序

    仅供参考,大家要学会自己制作,很有成就感的啊! 先看<c++标准程序库>这本书很厚,但是其实很简单,然后再看effective stl,注意顺序,我初学的时候stl还没了解多少就看effe ...

  9. Tensorflow学习教程------tensorboard网络运行和可视化

    tensorboard可以将训练过程中的一些参数可视化,比如我们最关注的loss值和accuracy值,简单来说就是把这些值的变化记录在日志里,然后将日志里的这些数据可视化. 首先运行训练代码 #co ...

  10. java正则 读取html 获取标题/超链接/链接文本/内容

    java正则 读取html 获取标题/超链接/链接文本/内容 参考链接:http://yijianfengvip.blog.163.com/blog/static/175273432201142785 ...