spark dataframe 数据类型转换

2023-11-16

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.dataType

import 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.sparkContext

    val 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.withColumn
    println("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.selectExpr
    println("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.sql
    println("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|
+---+-----------+----------+

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spark dataframe 数据类型转换 的相关文章

  • 过滤字符串上的 Spark DataFrame 包含

    我在用火花1 3 0 http spark apache org releases spark release 1 3 0 html and 火花阿夫罗1 0 0 https github com databricks spark avro
  • 如何在Gradle中支持多种语言(Java和Scala)的多个项目?

    我正在尝试将过时的 Ant 构建转换为 Gradle 该项目包含约50个Java子项目和10个Scala子项目 Java 项目仅包含 Java Scala 项目仅包含 Scala 每个项目都是由 Java 和 Scala 构建的 这大大减慢
  • 多个 scala 库导致 intellij 出错?

    我正在使用 intellij 14 和 scala 2 11 6 使用 homebrew 安装并使用符号链接 ln s usr local Cellar scala 2 11 6 libexec src usr local Cellar s
  • 具有两个通用参数的上下文边界

    在 Scala 中 我可以使用上下文边界 def sort T Ordered t Seq T 与以下意思相同 def sort T t Seq T implicit def Ordered T 如果我有一个带有两个泛型参数的类怎么办 IE
  • Scala 宏的位置怎么了?

    我试图获取宏参数的原始输入字符串 但返回的位置似乎有点偏离 考虑这个宏 例如 object M import scala reflect macros Context import language experimental macros
  • Scala 的代码覆盖率工具 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • HashPartitioner 是如何工作的?

    我阅读了文档HashPartitioner http spark apache org docs 1 3 1 api java index html org apache spark HashPartitioner html 不幸的是 除了
  • Spark SQL 失败,因为“常量池已超过 JVM 限制 0xFFFF”

    我在 EMR 4 6 0 Spark 1 6 1 上运行此代码 val sqlContext SQLContext getOrCreate sc val inputRDD sqlContext read json input try inp
  • 可选择将项目添加到 Scala 映射

    我正在寻找这个问题的惯用解决方案 我正在构建一个valScala 不可变 Map 并希望有选择地添加一项或多项 val aMap Map key1 gt value1 key2 gt value2 if condition key3 gt
  • 规范化且不可变的数据模型

    Haskell如何解决 规范化不可变数据结构 问题 例如 让我们考虑一个表示前女友 男友的数据结构 data Man Man name String exes Woman data Woman Woman name String exes
  • Scala中有类似Java Stream的“peek”操作吗?

    在Java中你可以调用peek x gt println x 在 Stream 上 它将对每个元素执行操作并返回原始流 这与 foreach 不同 foreach 是 Unit Scala 中是否有类似的东西 最好是适用于所有 Monady
  • 在 Scala 中将元素追加到列表末尾

    我无法添加 type 元素T到一个列表中List T 我尝试过myList myElement但它似乎创建了一个奇怪的对象并访问myList last始终返回放入列表中的第一个元素 我怎么解决这个问题 List 1 2 3 4 Result
  • 在 Spark 结构化流 2.3.0 中连接两个流时,左外连接不发出空值

    两个流上的左外连接不发出空输出 它只是等待记录添加到另一个流中 使用套接字流来测试这一点 在我们的例子中 我们想要发出具有 null 值的记录 这些记录与 id 不匹配或 且不属于时间范围条件 水印和间隔的详细信息如下 val ds1Map
  • 获取SettingKey[T]的值

    我正在开发一个用于文档生成的插件 我想将所有生成的文件输出到我选择的目录中 该目录可以是SBT的子目录target目录 如下 val newTargetDirectory SettingKey File document target di
  • Scala 使用的 Redis 客户端库建议

    我正在计划使用 Scala 中的 Redis 实例进行一些工作 并正在寻找有关使用哪些客户端库的建议 理想情况下 如果存在一个好的库 我希望有一个为 Scala 而不是 Java 设计的库 但如果现在这是更好的方法 那么仅使用 Java 客
  • Spark scala 模拟 Spark.implicits 用于单元测试

    当尝试使用 Spark 和 Scala 简化单元测试时 我使用 scala test 和mockito scala 以及mockito Sugar 这只是让你做这样的事情 val sparkSessionMock mock SparkSes
  • Kafka 分区键无法正常工作

    我正在努力解决如何正确使用分区键机制的问题 我的逻辑是设置分区号为3 然后创建三个分区键为 0 1 2 然后使用分区键创建三个KeyedMessage 例如 KeyedMessage 主题 0 消息 KeyedMessage 主题 1 消息
  • IntelliJ IDEA 能否正确格式化 scala.html 文件以及如何启用它?

    IntelliJ IDEA 12 Ultimate 和 CE 格式化我的 main scala html 文件中的以下行 在 Play 应用程序中 main css gt As main css gt 是的 真的 它分解了带引号的字符串 我
  • Scala 中的随机列表[重复]

    这个问题在这里已经有答案了 我对 scala 中的随机播放列表有疑问 使用scala util Random 例如我有 val a cyan val b magenta val c yellow val d key val color Ra
  • 火花内存不足

    我有一个文件夹 里面有 150 G 的 txt 文件 大约 700 个文件 平均每个 200 MB 我使用 scala 来处理文件并最终计算一些汇总统计数据 我认为有两种可能的方法可以做到这一点 手动循环所有文件 对每个文件进行计算并最终合

随机推荐

  • 深度学习(入门)——逻辑回归模型(Logistics Regression)

    从逻辑回归开始 是因为这是一个简单的 可以理解成为一个简单的一层的神经网络 后续将逐步深入 了解更复杂的神经网络 一 假设函数 逻辑回归算法适用于二分类问题 例如在输入一个猫的图片到模型中 模型会输出1 这是一只猫 或者0 不是一只猫 对于
  • 在RHEL6配置IPv6 DNS Server

    Youtube上有一个视频是关于IPv4 DNS Server配置的 链接为https www youtube com watch v ZQkMYWTx28o 我在这里照猫画虎 配置一下IPv6的 以本人的机器为例 网卡为eth3 IPv6
  • sql重难点

    SQL总结 语法部分 1 exists和in的区别 where exists select x from employees e where e department id d department id where department
  • 小议CSDN周赛57期 - 凑数

    本期周赛几乎忘记参加 在最后几分钟的时候上来看了看 那些选择判断一通乱选 填空题也已经被吐槽得差不多了 这里不多说 只说我对第一道编程题的看法 吐槽 因为 C 站的机制是 即使它错了 它也不会承认 印象里只承认且改过一次 再争辩只会把你拉黑
  • HTML样式

    目录 HTML 的 style 属性 不赞成使用的标签和属性 应该避免使用下面这些标签和属性 HTML 样式实例 背景颜色 HTML 样式实例 字体 颜色和尺寸 HTML 样式实例 文本对齐 一个完整的实例 style 属性用于改变 HTM
  • 安卓手机玩游戏卡顿怎么解决_手机玩游戏的时候卡顿,怎么处理?

    手机内存不足或者是后台开了太多的应用程序 请关闭不需要的应用程序 并且定时清理手机缓存垃圾 释放内存 一 iPhone6玩游戏卡顿怎么办 1 关闭Assistive Touch 对于很多果粉来说 为了避免对Home键造成伤害 Assisti
  • 心电图心跳分类

    目录 背景介绍 数据探索性分析 特征工程 时间序列特征 背景介绍 赛题以医疗数据挖掘为背景 要求选手使用提供的心跳信号传感器数据训练模型并完成不同心跳信号的分类的任务 开源内容 https github com datawhalechina
  • HDU--1247:Hat’s Words (字典树)

    1 题目源地址 http acm hdu edu cn showproblem php pid 1247 2 解题思路 第一次接触字典树 代码也是参考别人的 代码参考博客 http blog csdn net red flame artic
  • [DevEco]解决“XXX“is not translated into en(English) ans zh(Chinese)

    问题描述 其实这个问题如字面意思 你在设置element string json的时候没有进行双语翻译 由于项目是国际版项目有中英双语string json配置文件 问题解决 分别在en element和zh element的string
  • QT---信号与槽机制

    QT 信号与槽机制 信号 signal 槽 slot 槽函数的命名格式 信号与槽的关联 实例1 自动关联 实例2 手动关联 信号 signal 信号是由对象改变状态后发射 emit 出去的事件 例如 一个pushButton 对象 最常见的
  • 一个android项目开发遇到的各种小问题(一)

    1 map格式字符串如何解析 借助json 先将字符串转化为json格式 再取值 JSONObject object new JSONObject posMap clientIden object getString iden 1 andr
  • windows下apache开启FastCGI

    1 在此链接下载一个合适的mod fcgid 文件 64位下载第一个 32位第二个 http www apachelounge com download 2 将解压后将文件中的 mod fcgid so 复制到apache的modules目
  • 用ProGuardGui混淆多个有依赖关系的项目,亲测有效

    前提 公司要混淆代码 A项目依赖B项目 要整体混淆AB这两个项目 步骤1 把AB两个项目通过maven命令打成同一个jar包 在pom文件里添加如下 执行maven命令语句 assembly assembly
  • SqueezeNet算法解析—鸟类识别—Paddle实战

    文章目录 一 理论基础 1 前言 2 设计理念 2 1 CNN微架构 CNN MicroArchitecture 2 2 CNN宏架构 CNN MacroArchitecture 2 3 模型网络设计探索过程 2 4 结构设计策略 2 5
  • Qt下载(多种下载通道+所有版本)

    Qt 体积很大 有 1GB 3GB 官方下载通道非常慢 相信很多读者会崩溃 所以建议大家使用国内的镜像网站 较快 或者使用迅雷下载 很快 作为 Qt 下载教程 本文会同时讲解以上三种下载方式 Qt 官方下载 非常慢 Qt 官网有一个专门的资
  • Qt CSV文件的创建,读写操作

    文章目录 一 CSV文件介绍 二 创建CSV文件 三 写入CSV文件 四 读取CSV文件 一 CSV文件介绍 逗号分隔值 Comma Separated Values CSV 有时也称为字符分隔值 因为分隔字符也可以不是逗号 其文件以纯文本
  • scala和spark的下载与安装

    简易安装scala和spark 一 安装scala 1 安装scala scala下载注意和jdk的版本号 下载地址 https www scala lang org download 2 上传到linux虚拟机里 可通过rz方式上传 上传
  • 量化交易是如何实现的?

    前面我们讲到 其实最简单的量化交易 就是定投 设置好标的 时间 金额 那么不需自己动手 就可以按照设置的策略进行定投 这就是量化交易的最初形态 那么 为了实现更加复杂一些的交易 比如说 选股 买卖点位的确定 追踪实时行情等 应该怎么去实现呢
  • Python_数据读取_读取单个csv文件和批量读取csv文件

    读取单个csv pd read csv 直接读取单个csv文件通过pd read csv 函数直接在指定路径进行文件读取 需要利用Pandas包 其中 1 路径前的r表示路径符号不转义 window操作系统下不再用调整 为 或 进行文件读取
  • spark dataframe 数据类型转换

    文章目录 1 spark sql数据类型 数字类型 日期类型 复杂类型 2 spark sql和scala数据类型对比 3 spark sql数据类型转换示例 代码 输出 1 spark sql数据类型 数字类型 ByteType 代表一个