美文网首页
SparkSQL文件按内容分区写至本地

SparkSQL文件按内容分区写至本地

作者: 白面葫芦娃92 | 来源:发表于2018-09-24 17:39 被阅读0次

原始数据:

[hadoop@hadoop000 data]$ cat infos.txt 
1,ruoze,30
2,jepson,18
3,spark,30
[hadoop@hadoop000 bin]$ ./spark-shell --master local[2] --jars ~/software/mysql-connector-java-5.1.27.jar
scala> case class Info (id: Int, name: String, age: Int)
scala> val info = spark.sparkContext.textFile("file:///home/hadoop/data/infos.txt")
scala> val infoDF = info.map(_.split(",")).map(x=> Info(x(0).toInt,x(1),x(2).toInt)).toDF
scala> infoDF.show()
+---+------+---+                                                                
| id|  name|age|
+---+------+---+
|  1| ruoze| 30|
|  2|jepson| 18|
|  3| spark| 30|
+---+------+---+
scala> infoDF.write.mode("overwrite").format("json").partitionBy("age").save("file:///home/hadoop/data/output")
[hadoop@hadoop000 ~]$ cd /data/output
[hadoop@hadoop000 output]$ ll
total 8
drwxrwxr-x. 2 hadoop hadoop 4096 Sep 24 07:29 age=18
drwxrwxr-x. 2 hadoop hadoop 4096 Sep 24 07:29 age=30
-rw-r--r--. 1 hadoop hadoop    0 Sep 24 07:29 _SUCCESS
[hadoop@hadoop000 output]$ cd age=30
[hadoop@hadoop000 age=30]$ ll
total 8
-rw-r--r--. 1 hadoop hadoop 24 Sep 24 07:29 part-00000-986f0ca2-b9bd-4ff7-8b63-9acf21f9e0d4.c000.json
-rw-r--r--. 1 hadoop hadoop 24 Sep 24 07:29 part-00001-986f0ca2-b9bd-4ff7-8b63-9acf21f9e0d4.c000.json
[hadoop@hadoop000 age=30]$ cat part*
{"id":1,"name":"ruoze"}
{"id":3,"name":"spark"}

用IDEA代码实现:

import org.apache.spark.sql.SparkSession

object SparkSQLApp {
  def main(args: Array[String]): Unit = {
      val spark = SparkSession
            .builder()
            .appName("SparkSQLApp")
            .master("local[2]")
            .getOrCreate()
      val info = spark.sparkContext.textFile("file:///E:/BigDataSoftware/data/infos.txt")
      import spark.implicits._
      val infoDF = info.map(_.split(",")).map(x=> Info(x(0).toInt,x(1),x(2).toInt)).toDF
      infoDF.write.mode("overwrite").option("timestampFormat", "yyyy/MM/dd     HH:mm:ss ZZ").format("json").partitionBy("age").save("file:///E:/BigDataSoftware/data/output")
    spark.stop()
  }
  case class Info (id: Int, name: String, age: Int)
}

如果没有.option("timestampFormat", "yyyy/MM/dd HH:mm:ss ZZ")会报错:

Exception in thread "main" java.lang.IllegalArgumentException: Illegal pattern component: XXX
    at org.apache.commons.lang3.time.FastDateFormat.parsePattern(FastDateFormat.java:577)
    at org.apache.commons.lang3.time.FastDateFormat.init(FastDateFormat.java:444)
    at org.apache.commons.lang3.time.FastDateFormat.<init>(FastDateFormat.java:437)
...........................................

原因:
The default for the timestampFormat is yyyy-MM-dd'T'HH:mm:ss.SSSXXX which is an illegal argument. It needs to be set when you are writing the dataframe out.
The fix is to change that to ZZ which will include the timezone.

相关文章

  • SparkSQL文件按内容分区写至本地

    原始数据: 用IDEA代码实现: 如果没有.option("timestampFormat", "yyyy/MM/...

  • ADB常用命令使用方法总结

    // 文件的操作之前,必须先挂在分区,以获得写权限adb remount // 导入文件 adb push 本地路...

  • js保存内容至本地文件

    今天再写一个脚本的时候,遇到了这个需求,把代码贴在这里。主要是参考了张鑫旭老师的博客,那里介绍的更详细:JS前端创...

  • SCP命令常用操作

    传输本地文件至远程服务器 传输本地目录至远程服务器 传输远程服务器文件到本地 传输远程服务器目录到本地

  • Linux服务器ssh免密登录

    1、本地生成秘钥文件 ssh-keygen -t rsa 执行上述命令,一路回车; 2、拷贝本地秘钥内容至远程服务...

  • sql server 表分区

    添加文件分组 创建文件,并分配文件组 分区函数 分区方案 建表 我的博客即将搬运同步至腾讯云+社区,邀请大家一同入...

  • Spark_性能调优及Spark3.0新特性

    1.spark_shuffle_分区数 spark_sql aqe 优化SparkSQL中,基于SQL分析或者D...

  • 读取本地文件内容

  • 21 sparkSQL

    sparkSQL服务架构 sparkSQL与Hive集成 1需要配置的项目 1、拷贝hive的配置文件 Hive-...

  • Java读取文件方法汇总

    这篇文章主要为大家详细介绍了Java读取文件方法,按字节读取文件内容、按字符读取文件内容、随机读取文件内容等,具有...

网友评论

      本文标题:SparkSQL文件按内容分区写至本地

      本文链接:https://www.haomeiwen.com/subject/kehhoftx.html