Spark读取结构化数据
时间:2022-06-01
本文章向大家介绍Spark读取结构化数据,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
开公众号啦,分享读书心得,欢迎一起交流成长。
读取结构化数据
Spark可以从本地CSV,HDFS以及Hive读取结构化数据,直接解析为DataFrame,进行后续分析。
读取本地CSV
需要指定一些选项,比如留header,比如指定delimiter值,用,
或者t
或者其他。
import org.apache.spark.sql.{DataFrame, SparkSession}
object ReadCSV {
val spark: SparkSession = SparkSession
.builder()
.appName("Spark Rocks")
.master("local[*]")
.getOrCreate()
val path: String = "/path/to/file/data.csv"
val df: DataFrame = spark.read
.option("header","true")
.option("inferSchema","true")
.option("delimiter",",")
.csv(path)
.toDF()
def main(args: Array[String]): Unit = {
df.show()
df.printSchema()
}
}
读取Hive数据
SparkSession可以直接调用sql
方法,传入sql查询语句即可。返回的DataFrame可以做简单的变化,比如转换
数据类型,对重命名之类。
import org.apache.spark.sql.{DataFrame, SparkSession}
import org.apache.spark.sql.types.IntegerType
object ReadHive {
val spark: SparkSession = SparkSession
.builder()
.appName("Spark Rocks")
.master("local[*]")
.enableHiveSupport() // 需要开启Hive支持
.getOrCreate()
import spark.implicits._ //隐式转换
val sql: String = "SELECT col1, col2 FROM db.myTable LIMIT 1000"
val df: DataFrame = spark.sql(sql)
.withColumn("col1", $"col1".cast(IntegerType))
.withColumnRenamed("col2","new_col2")
def main(args: Array[String]): Unit = {
df.show()
df.printSchema()
}
}
读取HDFS数据
HDFS上没有数据无法获取表头,需要单独指定。可以参考databricks的网页。一般HDFS默认在9000端口访问。
import org.apache.spark.sql.{DataFrame, SparkSession}
object ReadHDFS {
val spark: SparkSession = SparkSession
.builder()
.appName("Spark Rocks")
.master("local[*]")
.getOrCreate()
val location: String = "hdfs://localhost:9000/user/zhangsan/test"
val df: DataFrame = spark
.read
.format("com.databricks.spark.csv")
.option("inferSchema","true")
.option("delimiter"," 01")
.load(location)
.toDF("col1","col2")
def main(args: Array[String]): Unit = {
df.show()
df.printSchema()
}
}
- 第三章 正则表达式括号的作用
- KMP算法
- 【强势回归,Android开发疑难杂症】Process 和 ProcessBuilder 区别
- 史上最全webview详解
- SpringBoot快速入门
- 效果类似于label从下往上滑(采用uiTableView实现)
- android 热修补之andfix实践
- ios 设置label的高度随着内容的变化而变化
- Android字体大小怎么自适应不同分辨率?
- iOS textfield实现一行的数字限制,超出进行弹框
- android https安全连接
- 第二章 正则表达式位置匹配攻略
- 从网络上下载省份城市名称并存入文件然后进行读取省份城市
- android 应用模式之mvp
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP实用小技巧之调用录像的方法
- Laravel重定向,a链接跳转,控制器跳转示例
- Laravel 错误提示本地化的实现
- Laravel框架DB facade数据库操作详解
- laravel 解决强制跳转 https的问题
- 在laravel中实现将查询的对象转换为多维数组的函数
- 在Laravel 中实现是否关注的示例
- Laravel框架查询构造器常见用法总结
- laravel 解决多库下的DB::transaction()事务失效问题
- laravel 实现上传图片到本地和前台访问示例
- laravel框架模型中非静态方法也能静态调用的原理分析
- Laravel 5.2 文档 数据库 —— 起步介绍
- laravel csrf排除路由,禁止,关闭指定路由的例子
- thinkphp框架类库扩展操作示例
- Laravel ORM 数据model操作教程