创建dataframe的几种方式——读取json格式的文件

本文介绍如何使用Spark读取JSON格式文件并创建DataFrame,包括两种读取方式及DataFrame的基本操作,如转换为RDD、选择列、过滤、分组计数等。同时,文章还展示了如何将DataFrame注册为临时表并进行SQL查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建DataFrame的方式一共有

  1. 读取json格式的文件创建DataFrame

注意:

  • json文件中的json数据不能嵌套json格式数据。
  • DataFrame是一个一个Row类型的RDD,df.rdd()/df.javaRdd()。
  • 可以两种方式读取json格式的文件。
  • df.show()默认显示前20行数据。
  • DataFrame原生API可以操作DataFrame(不方便)。
  • 注册成临时表时,表中的列默认按ascii顺序显示列。

一、Java版本的代码:

SparkConf conf = new SparkConf();
conf.setMaster("local").setAppName("jsonfile");
SparkContext sc = new SparkContext(conf);
		
//创建sqlContext
SQLContext sqlContext = new SQLContext(sc);
		
/**
 * DataFrame的底层是一个一个的RDD  RDD的泛型是Row类型。
 * 以下两种方式都可以读取json格式的文件
 */
 DataFrame df = sqlContext.read().format("json").load("sparksql/json");
// DataFrame df2 = sqlContext.read().json("sparksql/json.txt");
// df2.show();
 /**
  * DataFrame转换成RDD
  */
 RDD<Row> rdd = df.rdd();
/**
 * 显示 DataFrame中的内容,默认显示前20行。如果现实多行要指定多少行show(行数)
 * 注意:当有多个列时,显示的列先后顺序是按列的ascii码先后显示。
 */
// df.show();
/**
 * 树形的形式显示schema信息
 */
 df.printSchema();
		
 /**
  * dataFram自带的API 操作DataFrame
  */
  //select name from table
 // df.select("name").show();
 //select name age+10 as addage from table
	 df.select(df.col("name"),df.col("age").plus(10).alias("addage")).show();
 //select name ,age from table where age>19
	 df.select(df.col("name"),df.col("age")).where(df.col("age").gt(19)).show();
 //select count(*) from table group by age
 df.groupBy(df.col("age")).count().show();
		
 /**
   * 将DataFrame注册成临时的一张表,这张表临时注册到内存中,是逻辑上的表,不会雾化到磁盘
  */
 df.registerTempTable("jtable");
		
 DataFrame sql = sqlContext.sql("select age,count(1) from jtable group by age");
 DataFrame sql2 = sqlContext.sql("select * from jtable");
		
 sc.stop();

默认情况下显示前20行,如果要想显示多行,那么可以通过设置的方式。

读取json格式文件的方式有两种:

DataFrame df = sqlContext.read().format("json").load("sparksql/json");
// DataFrame df2 = sqlContext.read().json("sparksql/json.txt");

显示表信息的方式有两种:

df.show或者df.printSchema

二、Scala代码

val conf = new SparkConf()
conf.setMaster("local").setAppName("jsonfile")

val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
val df = sqlContext.read.json("sparksql/json")  
//val df1 = sqlContext.read.format("json").load("sparksql/json")

df.show()
df.printSchema()
//select * from table
df.select(df.col("name")).show()
//select name from table where age>19
df.select(df.col("name"),df.col("age")).where(df.col("age").gt(19)).show()
//select count(*) from table group by age
df.groupBy(df.col("age")).count().show();
 
/**
 * 注册临时表
 */
df.registerTempTable("jtable")
val result  = sqlContext.sql("select  * from jtable")
result.show()
sc.stop()

 

### 如何将JSON文件转换为CSV文件 以下是几种常见的方法来完成这一任务: #### 方法一:使用Pandas库 可以通过`pandas`库加载JSON数据并将其保存为CSV文件。这种方法简单高效,适合大多数情况。 ```python import pandas as pd # 读取JSON文件 with open('data.json', 'r') as file: data = pd.read_json(file) # 转换为CSV文件并保存 data.to_csv('data.csv', index=False) # 不保留索引列[^1] ``` 此方法利用了`pandas.DataFrame`的强大功能,能够快速处理结构化的JSON数据,并自动调整其格式以适应CSV的要求。 --- #### 方法二:使用命令行工具 `json2csv` 如果偏好于命令行操作或者希望减少编程工作量,则可以考虑使用专门设计用于此类任务的工具——`json2csv`。这是一个轻量级的应用程序,可以直接解析复杂的嵌套JSON对象并将它们转化为易于阅读的表格形式[^2]。 安装方式如下: ```bash pip install json2csv ``` 运行示例: ```bash json2csv -i input.json -o output.csv ``` 这里 `-i` 参数指定了输入源即原来的 JSON 文件位置;而 `-o` 则定义了目标 CSV 输出的位置。 --- #### 方法三:手动编写脚本 (不借助第三方库) 对于某些特定需求可能无法完全满足现有框架的功能时,可以选择自己动手构建解决方案。下面展示了一个基本的例子,其中包含了打开、读取以及写入相应文件的操作流程[^4]: ```python import json import csv def convert_json_to_csv(): # 打开JSON文件进行读取 with open("input.json", "r") as json_file, \ open("output.csv", "w", newline='') as csv_file: # 加载整个JSON文档到内存中 records = json.load(json_file) # 获取字段名称作为CSV头部 fieldnames = list(records[0].keys()) # 创建CSV写入器实例 writer = csv.DictWriter(csv_file, fieldnames=fieldnames) # 写入表头 writer.writeheader() # 写入每一条记录 for record in records: writer.writerow(record) if __name__ == '__main__': convert_json_to_csv() ``` 这段代码展示了如何逐条遍历JSON列表中的字典元素,并逐一映射至对应的CSV单元格之中。 --- #### 方法四:使用专用工具 `JSON2CSV` 除了上述提到的方法之外,还有另外一种叫做`JSON2CSV`的小型实用程序可供选择。它同样具备良好的灵活性和支持复杂的数据结构的能力,比如多维数组等特性[^3]。 执行样例: ```bash python json2csv.py --input=input.json --output=output.csv ``` 在这里我们假设已经下载好了名为`json2csv.py`的脚本文件,并按照官方指导完成了必要的配置步骤之后再调用它来进行实际转化过程。 --- ### 总结 以上介绍了四种不同途径实现从JSON向CSV转变的目标,各有优劣之处需依据具体应用场景做出合理抉择。无论是采用高级别的抽象封装还是深入底层细节控制都提供了足够的自由度去达成最终目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值