[转]SparkSQL中DataFrame的getAs和getString函数解析

56 篇文章 4 订阅
24 篇文章 0 订阅

JSON数据

{"name":"Michael","age":10, "adress": "beijin"}
{"name":"Andy", "age":30, "adress": "beijin"}
{"name":"Justin", "age":19, "adress": "beijin"}

getAs函数

peopleDF.map(x => x.getAs[String]("adress")).show()

//运行结果
+------+
| value|
+------+
|beijin|
|beijin|
|beijin|
+------+

//函数源码
def getAs[T](fieldName: String): T = getAs[T](fieldIndex(fieldName))

//返回fieldIndex值,类型为Int

def fieldIndex(name: String): Int = {
    throw new UnsupportedOperationException("fieldIndex on a Row without schema is undefined.")
  }
  
//上述函数返回的fieldIndex,将获得的列的类型强制转换为T的类型
def getAs[T](i: Int): T = get(i).asInstanceOf[T]

def get(i: Int): Any

getString函数

peopleDF.map(x => x.getString(0)).show()

//运行结果
+------+
| value|
+------+
|beijin|
|beijin|
|beijin|
+------+

//函数源码,可见与getAs函数的底层一模一样,只不过将泛型T变成了String
def getString(i: Int): String = getAs[String](i)

从上面两个函数得出的运行结果相同,可以得出结论,JSON中的字段转化为DataFrame后的fieldIndex,是从右向左的,"adress"的fieldIndex为0,"age"的fieldIndex为1,"name"的fieldIndex为2。

原文链接:https://blog.csdn.net/qq_38258720/article/details/108271970

SparkSQLDataFrame是一种分布式数据集合,它提供了一系列的高级操作来处理结构化数据。DataFrame可以很方便地写入到外部存储系统,比如Hive表或者其他支持的数据库和文件系统。以下是使用DataFrame将数据写入表的基本步骤: 1. 准备DataFrame:首先你需要有一个Spark DataFrame,这个DataFrame可以是通过各种方式创建的,比如从外部数据源读取数据,或者通过换现有的RDD或Dataset得到。 2. 指定写入选项:根据你的需求,你可能需要指定一些写入选项,比如数据写入的格式、分隔符、压缩方式、是否允许覆盖等。 3. 使用write方法:调用DataFrame的write方法,并传入之前指定的写入选项,最后指定写入模式。常见的写入模式有`append`(追加)、`overwrite`(覆盖)、`ignore`(忽略)和`errorIfExists`(存在错误)。 4. 指定表名:使用`into`方法指定要写入的目标表名。 下面是一个使用DataFrame将数据写入Hive表的示例代码: ```scala // 假设df是一个已经存在的DataFrame val tableName = "your_table_name" // 你想要写入的Hive表名 // 将DataFrame写入Hive表,假设是追加模式 df.write .format("hive") // 指定使用Hive格式 .option("codec", "org.apache.hadoop.io.compress.GzipCodec") // 指定压缩编解码器 .saveAsTable(tableName) // 保存为Hive表 ``` 上面的代码展示了如何将DataFrame保存为Hive表。如果要写入其他类型的表或文件系统,需要相应地调整`format`方法的参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值