当前位置: 首页 > article >正文

Spark创建多种数据格式的DataFrame

假如我们要通过RDD[Row]创建一个包含多个列的DataFrame,重点是列的数据类型可能会包含多个,这时候需要有一点技巧。

| uid | user_name | age | income | 
|:----|:----------|:----|:-------|
| 1111 | nituchao | 21 | 123.0   |

这个`DataFrame`里包含多个数据类型:
* uid: Long
* user_name: String
* age: Int
* income: Double

我们可以使用下面的方式来构建:

```scala
import org.apache.spark.sql.Row
import org.apache.spark.sql.types.{DoubleType, IntegerType, LongType, StringType, StructField, StructType}

val uidSeq = Seq(1111L)
val nameSeq = Seq("nituchao")
val ageSeq = Seq(21)
val incomeSeq = Seq(123.0)

val rowRDD = spark.sparkContext.parallelize(Seq(Row.fromSeq(uidSeq ++ userNameSeq ++ ageSeq ++ incomeSeq)))

val schema = StructType(Seq(StructField("uid", LongType, nullable = true),
      StructField("name", StringType, nullable = true),
      StructField("age", IntegerType, nullable = true),
      StructField("sex", DoubleType, nullable = true)))

val df = spark.sqlContext.createDataFrame(rowRDD, schema)

df.printSchema()
df.show()
```

输出:
```shell
root
 |-- uid: long (nullable = true)
 |-- name: string (nullable = true)
 |-- age: integer (nullable = true)
 |-- sex: double (nullable = true)

+----+---------+---+-----+
| uid|name     |age|  sex|
+----+---------+---+-----+
|1111| nituchao| 21|123.0|
+----+---------+---+-----+
```

上面的技巧在于,使用`Row.fromSeq()`时,不同类型的数据,要用`Seq()`分别包起来然后`++`拼接后传进去。因为Seq中的元素必须是同类型的,如直接构造成一个Seq则会自动进行类型转换,多种类型数据不能混用。

问题不大,却造成很大困扰。


http://www.kler.cn/a/473099.html

相关文章:

  • SQL Server中可以通过扩展事件来自动抓取阻塞
  • C语言初阶习题【25】strcpy的模拟实现
  • 网络基础1 http1.0 1.1 http/2的演进史
  • Boost.Asio 同步读写及客户端 - 服务器实现详解
  • QPS和TPS 的区别是什么?QPS 大了会有什么问题,怎么解决?
  • Mysql--基础篇--函数(字符串函数,日期函数,数值函数,聚合函数,自定义函数及与存储过程的区别等)
  • 消息队列:原理、问题与设计全解析
  • BERT模型详解及代码复现
  • JAVA学习记录3
  • vue之element-ui文件上传(二)
  • Blockly 二次封装
  • 沁恒CH32V208GBU6定时器:开启定时器读取RSSI并且定时器单位为广播间隔单位一样;自动重装载定时器与关闭定时器
  • Elasticsearch(三)
  • 解决SSH连接时遇到的“远程主机身份验证已更改 (WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!)”警告
  • 八万字Java面试高频题目汇总(冲刺春招!)
  • Lua语言的函数实现
  • Objective-C语言的文件操作
  • wireshark抓包工具新手使用教程
  • .NET Core + Kafka 开发指南
  • MySQL 数据库分片技术指南
  • 数据库中锁与ETL的故障排除和性能优化
  • 【微服务】8、分布式事务 ( XA 和 AT )
  • Perl语言的文件操作
  • DeviceNet转Profinet网关如何革新污水处理行业!
  • tomcat12启动流程源码分析
  • adb使用及常用命令