Spark创建多种数据格式的DataFrame

假如我们要通过RDDRow创建一个包含多个列的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则会自动进行类型转换,多种类型数据不能混用。

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

相关推荐
陕西企来客17 分钟前
陕西旅游酒店 GEO 服务市场深度调查:AI 搜索优化格局与真实服务真相
大数据·人工智能·旅游
phltxy19 分钟前
HAProxy安装与RabbitMQ负载均衡配置
分布式·rabbitmq·负载均衡
MemoriKu38 分钟前
【端侧 AI 部署】MobileCLIP 导出 ONNX/TFLite 并发布到 Hugging Face 的完整实践
大数据·人工智能·elasticsearch·搜索引擎·重构·开源
VALENIAN瓦伦尼安教学设备39 分钟前
激光对中仪应用行业及全球市场份额解析
大数据·人工智能·嵌入式硬件
一次旅行1 小时前
AI 技术热点新闻简报|2026-05-30
大数据·人工智能
逸Y 仙X1 小时前
文章五:Elasticsearch安全通信
java·大数据·安全·elasticsearch·搜索引擎·全文检索·jenkins
HannahTx1 小时前
录音文件存在哪里方便整理查找?全场景存储方案对比
大数据
weixin_468466851 小时前
数据高效处理实战:从痛点解决到价值落地
大数据·python·自动化·数据处理
城事漫游Molly1 小时前
AI与质性研究的融合(三):AI赋能质性数据分析——从编码到理论构建的新范式
大数据·人工智能·机器学习·prompt·ai for science·智能体·定性研究
jiayong232 小时前
Kafka 高吞吐消息链路常见面试问题及详细解答
分布式·面试·kafka