PySpark系列文章:
(四)PySpark3:Mlib机器学习实战-信用卡交易数据异常检测
一、SparkSQL介绍
Spark SQL是Apache Spark生态系统的一个关键组件,专注于处理和分析结构化和半结构化的大规模数据。Spark SQL建立在Spark核心之上,为用户提供了高效且易用的数据处理接口,从而将关系型和非关系型数据融入到分布式计算环境中。
核心概念之一是DataFrame API,它提供了一个高级的、面向数据的抽象,允许用户以声明性的方式处理数据。DataFrame是一个分布式的、具有表格结构的数据集,类似于传统数据库中的表。通过DataFrame API,用户可以执行各种数据操作,包括过滤、转换、聚合、连接等,而无需深入了解底层的分布式计算模型。
RDD,DataFrame和DataSet对比:
RDD可以存储任何类型的数据,包括结构化数据、半结构化数据和非结构化数据,RDD的操作更接近底层,更适合对数据进行底层控制和自定义处理。
DataFrame构建在RDD之上,提供了更高级的抽象,是一个分布式的、以列为主的数据集合,类似于关系型数据库中的表。DataFrame可以通过多种数据源进行创建,包括结构化数据源(如JSON、CSV、Parquet)和Hive表,并且提供了丰富的SQL和DataFrameAPI,可以方便地进行数据处理和分析。
DataSet在DataFrame基础上进一步增加了数据类型信息,可以通过编程语言的类型系统来检查错误,并提供更好的编译时类型检查。
DataFrame和DataSet都支持SQL交互式查询,可以和 Hive无缝衔接。DataSet只有Scala语言和Java语言接口中才支持,在Python和R语言接口只支持DataFrame。
二、创建DataFrame
首先导包:
import pandas as pd
from pyspark.sql.types import *
import pyspark.sql.functions as F
from pyspark.sql import Row
pd.DataFrame.iteritems = pd.DataFrame.items
1、通过ToDF方法
可以将RDD用toDF方法转换成DataFrame。
rdd = sc.parallelize([(1,“James”,27,1000),(2,“Bob”,22,500),(3,“Alice”,25,800),(4,“Jon”,29,1200)])
df = rdd.toDF([“id”,“name”,“age”,“sal”])
df.show()
输出结果:
±–±----±–±—+
| id| name|age| sal|
±–±----±–±—+
| 1|James| 27|1000|
| 2| Bob| 22| 500|
| 3|Alice| 25| 800|
| 4| Jon| 29|1200|
±–±----±–±—+
2、通过createDataFrame方法
可以将Pandas.DataFrame转换成pyspark中的DataFrame,也可直接对数据列表、schema进行转换。
#将pandas.DataFrame转换为pyspark.DataFrame
pdf = pd.DataFrame([(1,“James”,27,1000),(2,“Bob”,22,500),(3,“Alice”,25,800),(4,“Jon”,29,1200)]
,columns=[“id”,“name”,“age”,“sal”])
df = spark.createDataFrame(pdf)
print(type(df))
#将list转换为pyspark.DataFrame
df = spark.createDataFrame([(1,“James”,27,1000),(2,“Bob”,22,500),(3,“Alice”,25,800),(4,“Jon”,29,1200)]
,[“id”,“name”,“age”,“sal”])
print(type(df))