一、SparkR简介
SparkR是一个R语言包,它提供了轻量级的方式使得可以在R语言中使用Apache Spark。在Spark 1.4中,SparkR实现了分布式的data frame,支持类似查询、过滤以及聚合的操作(类似于R中的data frames:dplyr),但是这个可以操作大规模的数据集。
DataFrame是数据组织成一个带有列名称的分布式数据集,和R语言中的data frame类似,需先配置SparkContext和SQLContext:
sc<-sparkR.init()
sqlContext<-sparkRSQL.init(sc)
Spark2.0之后的初始化,直接在spark/bin目录下启动./sparkR即可初始化“SparkSession available as 'spark'”
二、构造DataFrame
1通过本地data frame构造,createDataFrame(sqlConetx,data frame), as.DataFrame(data frame);
data(iris)
df <- as.DataFrame(iris)
head(df)
# Sepal_Length Sepal_Width Petal_Length Petal_Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
#6 5.4 3.9 1.7 0.4 setosa
2通过Data Sources构造:JSON和Parquet文件等;
##加载本地json文件
## /tmp/people.json
#{"name":"Michael"}
#{"name":"Andy", "age":30}
#{"name":"Justin", "age":19}
people <- read.df("file:///tmp/people.json", "json")
head(people)
# age name
#1 NA Michael
#2 30 Andy
#3 19 Justin
printSchema(people)
#root
# |-- age: long (nullable = true)
# |-- name: string (nullable = true)
##加载本地parquet文件
users <- read.df("file:///tmp/users.parquet", "parquet")
printSchema(users)
#root
# |-- name: string (nullable = true)
# |-- favorite_color: string (nullable = true)
# |-- favorite_numbers: array (nullable = true)
# | |-- element: integer (containsNull = true)
## 加载本地的csv文件
people <- read.df("file:///tmp/people.csv", "csv", header = "true", inferSchema = "true", na.strings = "NA")
注:文件路径去掉file://即可加载hdfs上的文件
3通过Hive tables构造,创建HiveContext(spark2.0已统一为sparkSession, 不用再加载)
##注意用户的权限问题
sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")
sql("LOAD DATA LOCAL INPATH '/tmp/kv1.txt' INTO TABLE src")
# Queries can be expressed in HiveQL.
results <- sql("FROM src SELECT key, value")
# results is now a SparkDataFrame
head(results)
## key value
## 1 238 val_238
## 2 86 val_86
## 3 311 val_311
三、SparkDataFrame操作
可以对创建对DataFrame进行各种操作,比如查询列、行等,也可以进行分组统计聚合操作,还可以对列的数据进行操作,详细的API列表可以见官方SparkR的API