文章目录

  • 1.spark sql数据类型
    • 数字类型
    • 日期类型
    • 复杂类型
  • 2.spark sql和scala数据类型对比
  • 3.spark sql数据类型转换示例
    • 代码
    • 输出

1.spark sql数据类型

数字类型

● ByteType:代表一个字节的整数。范围是-128到127
● ShortType:代表两个字节的整数。范围是-32768到32767
● IntegerType:代表4个字节的整数。范围是-2147483648到2147483647
● LongType:代表8个字节的整数。范围是-9223372036854775808到9223372036854775807
● FloatType:代表4字节的单精度浮点数 DoubleType:代表8字节的双精度浮点数
● DecimalType:代表任意精度的10进制数据。通过内部的java.math.BigDecimal支持。BigDecimal由一个任意精度的整型非标度值和一个32位整数组成
● StringType:代表一个字符串值
● BinaryType:代表一个byte序列值
● BooleanType:代表boolean值

日期类型

● TimestampType:代表包含字段年,月,日,时,分,秒的值
● DateType:代表包含字段年,月,日的值

复杂类型

● ArrayType(elementType, containsNull):代表由elementType类型元素组成的序列值。containsNull用来指明ArrayType中的值是否有null值
● MapType(keyType, valueType, valueContainsNull):表示包括一组键 - 值对的值。通过keyType表示key数据的类型,通过valueType表示value数据的类型。valueContainsNull用来指明MapType中的值是否有null值
● StructType(fields):表示一个拥有StructFields (fields)序列结构的值
StructField(name, dataType, nullable):代表StructType中的一个字段,字段的名字通过name指定,dataType指定field的数据类型,nullable表示字段的值是否有null值。

2.spark sql和scala数据类型对比

3.spark sql数据类型转换示例

● 三种方式

● withColumn (推荐)
● selectExpr
● sql

代码

package com.lzx.sparktuning.dataTypeimport org.apache.spark.SparkContext
import org.apache.spark.sql.functions.col
import org.apache.spark.sql.types.{BooleanType, DateType, StringType}
import org.apache.spark.sql.{DataFrame, SparkSession}object ModifyDataType {def main(args: Array[String]): Unit = {val session: SparkSession = SparkSession.builder().appName(this.getClass.getSimpleName).master("local[*]").getOrCreate()val sc: SparkContext = session.sparkContextval list: List[(String, Int, String, String, String, Double)] =List(("James", 34, "2006-01-01", "true", "M", 3000.60),("Michael", 33, "1980-01-10", "true", "F", 3300.80),("Robert", 37, "1992-06-01", "false", "M", 5000.50))import session.implicits._val df: DataFrame = sc.parallelize(list).toDF("name", "age", "birthday", "isGraduated", "sex", "salary")df.printSchema()df.show(false)//1.withColumnprintln("withColumn---")val df2: DataFrame = df.withColumn("age", col("age").cast(StringType)).withColumn("isGraduated", col("isGraduated").cast(BooleanType)).withColumn("birthday", col("birthday").cast(DateType))df2.printSchema()df2.show(false)//2.selectExprprintln("selectExpr----")val df3: DataFrame = df.selectExpr("cast(age as string) age","cast(isGraduated as boolean) isGraduated","cast(birthday as date) birthday")df3.printSchema()df3.show(false)//3.sqlprintln("sql---")df.createOrReplaceTempView("tmp")val df4: DataFrame = session.sql(s"""|SELECT STRING(age),BOOLEAN(isGraduated),DATE(birthday)|from tmp|""".stripMargin)df4.printSchema()df4.show(false)}
}

输出

root|-- name: string (nullable = true)|-- age: integer (nullable = false)|-- birthday: string (nullable = true)|-- isGraduated: string (nullable = true)|-- sex: string (nullable = true)|-- salary: double (nullable = false)+-------+---+----------+-----------+---+------+
|name   |age|birthday  |isGraduated|sex|salary|
+-------+---+----------+-----------+---+------+
|James  |34 |2006-01-01|true       |M  |3000.6|
|Michael|33 |1980-01-10|true       |F  |3300.8|
|Robert |37 |1992-06-01|false      |M  |5000.5|
+-------+---+----------+-----------+---+------+1.withColumn---
root|-- name: string (nullable = true)|-- age: string (nullable = false)|-- birthday: date (nullable = true)|-- isGraduated: boolean (nullable = true)|-- sex: string (nullable = true)|-- salary: double (nullable = false)+-------+---+----------+-----------+---+------+
|name   |age|birthday  |isGraduated|sex|salary|
+-------+---+----------+-----------+---+------+
|James  |34 |2006-01-01|true       |M  |3000.6|
|Michael|33 |1980-01-10|true       |F  |3300.8|
|Robert |37 |1992-06-01|false      |M  |5000.5|
+-------+---+----------+-----------+---+------+2.selectExpr----
root|-- age: string (nullable = false)|-- isGraduated: boolean (nullable = true)|-- birthday: date (nullable = true)+---+-----------+----------+
|age|isGraduated|birthday  |
+---+-----------+----------+
|34 |true       |2006-01-01|
|33 |true       |1980-01-10|
|37 |false      |1992-06-01|
+---+-----------+----------+3.sql---
root|-- age: string (nullable = false)|-- isGraduated: boolean (nullable = true)|-- birthday: date (nullable = true)+---+-----------+----------+
|age|isGraduated|birthday  |
+---+-----------+----------+
|34 |true       |2006-01-01|
|33 |true       |1980-01-10|
|37 |false      |1992-06-01|
+---+-----------+----------+

本文写于北京海淀五道口目田青年旅舍,由于疫情原因家被偷(封)了,无家可归

spark dataframe 数据类型转换相关推荐

  1. spark sql 数据类型转换_spark dataframe 类型转换

    读一张表,对其进行二值化特征转换.可以二值化要求输入类型必须double类型,类型怎么转换呢? 直接利用spark column 就可以进行转换: DataFrame dataset= hive.sq ...

  2. spark dataframe数据预处理---数据筛选

    利用.filter对dataframe的数据进行筛选 筛选比较符有"=="."!=".">"."<".&qu ...

  3. spark sql 数据类型转换_Databricks 第9篇:Spark SQL 基础(数据类型、NULL语义)

    Spark SQL 支持多种数据类型,并兼容Python.Scala等语言的数据类型.sql 一,Spark SQL支持的数据类型 整数系列:函数 BYTE, TINYINT:表示1B的有符号整数 S ...

  4. SparkSql 数据类型转换

    前言 数据类型转换这个在任何语言框架中都会涉及到,看起来非常简单,不过要把所有的数据类型都掌握还是需要一定的时间历练的 SparkSql数据类型 数字类型 ByteType:代表一个字节的整数.范围是 ...

  5. spark写表指定外部表_spark 将dataframe数据写入Hive分区表

    从spark1.2 到spark1.3,spark SQL中的SchemaRDD变为了DataFrame,DataFrame相对于SchemaRDD有了较大改变,同时提供了更多好用且方便的API. D ...

  6. 学习笔记Spark(七)—— Spark SQL应用(2)—— Spark DataFrame基础操作

    二.Spark DataFrame基础操作 2.1.DataFrame DataFrame是一种不可变的分布式数据集,这种数据集被组织成指定的列,类似于关系数据库中的表. 数据集的每一列都带有名称和类 ...

  7. 将DataFrame数据如何写入到Hive表中

    1.将DataFrame数据如何写入到Hive表中? 2.通过那个API实现创建spark临时表? 3.如何将DataFrame数据写入hive指定数据表的分区中? 从spark1.2 到spark1 ...

  8. 徒手打造基于Spark的数据工厂(Data Factory):从设计到实现

    在大数据处理和人工智能时代,数据工厂(Data Factory)无疑是一个非常重要的大数据处理平台.市面上也有成熟的相关产品,比如Azure Data Factory,不仅功能强大,而且依托微软的云计 ...

  9. 基于Alluxio系统的Spark DataFrame高效存储管理技术

    介绍 越来越多的公司和组织开始将Alluxio和Spark一起部署从而简化数据管理,提升数据访问性能.Qunar最近将Alluxio部署在他们的生产环境中,从而将Spark streaming作业的平 ...

最新文章

  1. 如何撤销正在审核的苹果app?
  2. ubuntu apt-get 默认下载路径
  3. 无意看到,当真给力!记住:永远不要在MySQL中使用UTF-8
  4. 机器学习——支持向量机SVM之非线性模型(原问题转化为对偶问题)
  5. C++ 泛型模板进阶
  6. oracle 11g 数据库恢复技术 --rman catalog
  7. leetcode力扣454. 四数相加 II
  8. 前后分离架构下跨域调试
  9. java -jar命令
  10. Vue启动项目报错travel@1.0.0 dev: `webpack-dev-server--inline --progress --config build/webpack.dev.conf.js
  11. 关于Ubuntu下firefox无法观看视频的解决
  12. 视频编解码之理论概述
  13. 实验一 网络流量捕获实验
  14. 【大数据面试题】(五)Spark 相关面试题总结
  15. 物联网之MQTT3.1.1和MQTT5协议 (4) PUBLISH报文
  16. 理解什么是DTO?什么是AutoMapper?
  17. 计算机科学与技术优劣,计算机科学与技术专业优势多多
  18. mysql可以安多个吗_全屋插座安多高?5个数字全搞定
  19. mongodb启用身份验证_启用2-Factor身份验证(2FA)之前应了解的事项
  20. Ubuntu16.04使用华为4G路由器(随行wifi)USB直连

热门文章

  1. 小米互联网生态链PK格力产品专利,你站哪边?
  2. Tomcat配置出错:Using CATALINA_OPTS: ““Tomcat启动闪退问题解决
  3. 深度学习acc曲线与loss曲线
  4. 搭建去中心化交易所——分享一个简单的DEX项目代码及文档
  5. 2006-5-7 18:42:00 崔永元逗老外逗出的震撼!!!!绝对经典
  6. 又一篇——崔永元逗老外
  7. SmartQQ二维码登陆接口分析
  8. Python返回汉字的汉语拼音(原创)
  9. JavaScript三大事件(二十二)
  10. 国产兼容三菱FX3U源码