大数据管理技术 Spark创建DataFrame

本文详细介绍了在Spark中创建DataFrame的八种方法,包括通过Seq、Json文件、csv文件、Json格式的RDD和DataSet、csv格式的DataSet、动态创建schema以及通过jdbc创建DataFrame。这些方法适用于不同场景,提供灵活的大数据处理方式。

参考链接:
(1)Spark创建DataFrame的三种方法
https://blog.youkuaiyun.com/martin_liang/article/details/79748503

(2)Spark创建DataFrame的几种方式
https://blog.youkuaiyun.com/shirukai/article/details/81085642

与关系数据库的表(Table)一样,DataFrame是Spark中对带模式(schema)行列数据的抽象。DateFrame广泛应用于使用SQL处理大数据的各种场景。
创建DataFrame有很多种方法,比如从本地List创建、从RDD创建或者从源数据创建。

创建DataFrame的几种方式


目标:生成如下的DataFrame数据

+----+---+-----------+
|name|age|      phone|
+----+---+-----------+
|ming| 20|15552211521|
|hong| 19|13287994007|
| zhi| 21|15552211523|
+----+---+-----------+

创建DataFrame的方法

(1)Spark中使用toDF函数创建DataFrame

通过导入(importing)Spark sql implicits, 就可以将本地序列(seq), 数组或者RDD转为DataFrame。只要这些数据的内容能指定数据类型即可。

注意:如果直接用toDF()而不指定列名字,那么默认列名为"_1", “_2”, …

#通过case class + toDF创建DataFrame的示例
import sqlContext.implicits._
val sqlContext = new org.apache.spark.sql.SQLContext(sc)

// Define the schema using a case class.
// you can use custom classes that implement the Product interface.
case class Person(name: String, age: Int)
 
// Create an RDD of Person objects and register it as a table.
val people = sc.textFile("examples/src/main/resources/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)).toDF()
people.registerTempTable("people")
 
// 使用 sqlContext 执行 sql 语句.
val teenagers = sqlContext.sql("SELECT name FROM people WHERE age >= 13 AND age <= 19")
 
// 注:sql()函数的执行结果也是DataFrame,支持各种常用的RDD操作.
// The columns of a row in the result can be accessed by ordinal.
teenagers.map(t => "Name: " + t(0)).collect().foreach(println)

(2)Spark中使用createDataFrame函数创建DataFrame

在SqlContext中使用createDataFrame也可以创建DataFrame。跟toDF一样,这里创建DataFrame的数据形态也可以是本地数组或者RDD。

#通过row+schema创建示例
import org.apache.spark.sql.types._
val schema = StructType(List(
    StructField("integer_column", IntegerType, nullable = false),
    StructField("string_column", StringType, nullable = true),
    StructField("date_column", DateType, nullable = true)
))
val rdd = sc.parallelize(Seq(
  Row(1, "First Value", java.sql.Date.valueOf("2010-01-01")),
  Row(2, "Second Value", java.sql.Date.valueOf(
### 关于大数据实验中使用 Spark DataFrame 的编程教程与示例代码 Spark DataFrame 是一种分布式数据集,提供了优化的性能和易用性。以下是一些关于如何在大数据实验中使用 Spark DataFrame 编程的详细资料和示例代码。 #### 创建 SparkSession SparkSession 是 Spark 2.0 引入的核心组件,用于初始化 Spark 环境并作为所有 DataFrame 操作的入口点。可以通过以下代码创建 SparkSession: ```python from pyspark.sql import SparkSession # 创建 SparkSession spark = SparkSession.builder \ .appName("DataFrameExample") \ .getOrCreate() ``` 上述代码定义了一个名为 `DataFrameExample` 的应用程序[^1]。 #### 创建 DataFrame 可以使用结构化数据(如列表或文件)来创建 DataFrame。以下是通过 Python 列表创建 DataFrame 的示例: ```python data = [("Alice", 25), ("Bob", 30), ("Charlie", 35)] df = spark.createDataFrame(data, ["Name", "Age"]) ``` 此代码将一个包含姓名和年龄的元组列表转换为 DataFrame,并指定列名为 `Name` 和 `Age`[^1]。 #### 数据查询与过滤 Spark DataFrame 提供了丰富的 API 来执行 SQL 风格的操作。例如,可以使用 `filter()` 方法筛选出满足条件的数据: ```python df.filter(df.Age > 30).show() ``` 此外,还可以将 DataFrame 注册为临时视图,并通过 SQL 查询进行操作: ```python df.createOrReplaceTempView("people") result = spark.sql("SELECT Name FROM people WHERE Age > 30") result.show() ``` 这种方法允许用户以更熟悉的方式编写查询语句[^1]。 #### 将 DataFrame 写入 Excel 文件 如果需要将 Spark DataFrame 的结果导出到 Excel 文件,可以先将其转换为 Pandas DataFrame,然后使用 Pandas 的 `to_excel()` 方法完成写入: ```python import pandas as pd # 将 Spark DataFrame 转换为 Pandas DataFrame pandas_df = df.toPandas() # 写入 Excel 文件 output_path = "/path/to/output.xlsx" pandas_df.to_excel(output_path, index=False) ``` 需要注意的是,当数据量较大时,`toPandas()` 可能会导致内存不足的问题,因此应谨慎使用[^3]。 #### DataFrame 与 RDD 的选择 在实际应用中,需要根据数据特性和任务需求选择使用 DataFrame 或 RDD。如果数据是结构化的或半结构化的,建议优先使用 DataFrame,因为它提供了更高的性能和更简洁的 API;而如果数据是非结构化的或需要复杂的自定义逻辑,则可以考虑使用 RDD[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值