博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spark sql 怎样处理日期类型
阅读量:6958 次
发布时间:2019-06-27

本文共 1979 字,大约阅读时间需要 6 分钟。

  hot3.png

spark sql 怎样处理日期类型、时间类型

json 每个对象 不能换行

##问题描述

json File 日期类型 怎样处理?怎样从字符型,转换为Date或DateTime类型?

json文件如下,有字符格式的日期类型

```

{ "name" : "Andy", "age" : 30, "time" :"2015-03-03T08:25:55.769Z"}

{ "name" : "Justin", "age" : 19, "time" : "2015-04-04T08:25:55.769Z" }

{ "name" : "pan", "age" : 49, "time" : "2015-05-05T08:25:55.769Z" }

{ "name" : "penny", "age" : 29, "time" : "2015-05-05T08:25:55.769Z" }

```

默认推测的Schema:

```

root

 |-- _corrupt_record: string (nullable = true)

 |-- age: long (nullable = true)

 |-- name: string (nullable = true)

 |-- time200: string (nullable = true)

```

测试代码

```

    val fileName = "person.json"

    val sc = SparkUtils.getScLocal("json file 测试")

    val sqlContext = new org.apache.spark.sql.SQLContext(sc)

    val jsonFile = sqlContext.read.json(fileName)

    jsonFile.printSchema()

```

##解决方案

### 方案一、json数据 时间为 long 秒或毫秒

### 方案二、自定义schema

```

    val fileName = "person.json" 

    val sc = SparkUtils.getScLocal("json file 测试")

    val sqlContext = new org.apache.spark.sql.SQLContext(sc)

    val schema: StructType = StructType(mutable.ArraySeq(

      StructField("name", StringType, true),

      StructField("age", StringType, true),

      StructField("time", TimestampType, true)));

    val jsonFile = sqlContext.read.schema(schema).json(fileName)

    jsonFile.printSchema()

    jsonFile.registerTempTable("person")

    val now: Timestamp = new Timestamp(System.currentTimeMillis())

 

    val teenagers = sqlContext.sql("SELECT * FROM person WHERE age >= 20 AND age <= 30 AND time <='" +now+"'")

    teenagers.foreach(println)

    val dataFrame = sqlContext.sql("SELECT * FROM person WHERE age >= 20 AND age <= 30 AND time <='2015-03-03 16:25:55.769'")

    dataFrame.foreach(println)

```

###方案三、sql建表 

创建表sql

```

CREATE TEMPORARY TABLE person IF NOT EXISTS 

[(age: long ,name:string ,time:Timestamp)] 

USING org.apache.spark.sql.json

OPTIONS (  path 'person.json')

语法

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 

   [(col-name data-type [, …])] 

  USING [OPTIONS ...] 

  [AS ]

```

### 方案四、用textfile convert

转载于:https://my.oschina.net/itnms/blog/479641

你可能感兴趣的文章
在idea中为类和方法自动生成注释
查看>>
流相关的操作方法封装
查看>>
Ant编译打包以及批量打包
查看>>
CCF NOI1061 Wifi密码
查看>>
Linux基础系统权限
查看>>
容器技术
查看>>
IE浏览器兼容的处理方式之一,使用特殊的注释 <!--[if IE]> ....<![endif]-->
查看>>
json对象和字符串的相互转换
查看>>
Cobbler学习之一--Fedora17下配置Cobbler安装环境
查看>>
ps教程连接
查看>>
知方可补不足~Sqlserver中的几把锁和.net中的事务级别
查看>>
我心中的核心组件(可插拔的AOP)~第四回 异常拦截器
查看>>
MVVM架构~knockoutjs系列之扩展ajax验证~验证数据是否存在
查看>>
Ubuntu下Android开发环境
查看>>
Python 实习遇见的各种面试题
查看>>
施耐德Sepam 40系列备自投逻辑
查看>>
gulp打包(压缩css,js,加md5码,图片压缩)
查看>>
button的默认类型
查看>>
tomcat server 报错之 More than the maximum allowed number of cookies
查看>>
KendoUI>Framework>Datasource>Overview
查看>>