如何对 SparkR 数据框进行子集化
How to subset SparkR data frame
假设我们有一个数据集 'people',其中包含 ID 和 Age 作为 2 乘以 3 的矩阵。
Id = 1 2 3
Age= 21 18 30
在 sparkR 中,我想创建一个新数据集 people2
,其中包含所有 18 岁以上的 ID。在本例中,它是 ID 1 和 3。在 sparkR 中,我会这样做
people2 <- people$Age > 18
但它不起作用。您将如何创建新数据集?
您可以在任一条件下使用 SparkR::filter
:
> people <- createDataFrame(sqlContext, data.frame(Id=1:3, Age=c(21, 18, 30)))
> filter(people, people$Age > 18) %>% head()
Id Age
1 1 21
2 3 30
或SQL 字符串:
> filter(people, "Age > 18") %>% head()
Id Age
1 1 21
2 3 30
也可以将 SparkR::sql
函数与原始 SQL 查询一起用于已注册的 table:
> registerTempTable(people, "people"
> sql(sqlContext, "SELECT * FROM people WHERE Age > 18") %>% head()
Id Age
1 1 21
2 3 30
对于那些欣赏 R 的众多选项来完成任何给定任务的人,您还可以使用 SparkR::subset() 函数:
> people <- createDataFrame(sqlContext, data.frame(Id=1:3, Age=c(21, 18, 30)))
> people2 <- subset(people, people$Age > 18, select = c(1,2))
> head(people2)
Id Age
1 1 21
2 3 30
回答评论中的额外细节:
id <- 1:99
age <- 99:1
myRDF <- data.frame(id, age)
mySparkDF <- createDataFrame(sqlContext, myRDF)
newSparkDF <- subset(mySparkDF,
mySparkDF$id==3 | mySparkDF$id==32 | mySparkDF$id==43 | mySparkDF$id==55,
select = 1:2)
take(newSparkDF,5)
(1) Spark Jobs
id age
1 3 97
2 32 68
3 43 57
4 55 45
假设我们有一个数据集 'people',其中包含 ID 和 Age 作为 2 乘以 3 的矩阵。
Id = 1 2 3
Age= 21 18 30
在 sparkR 中,我想创建一个新数据集 people2
,其中包含所有 18 岁以上的 ID。在本例中,它是 ID 1 和 3。在 sparkR 中,我会这样做
people2 <- people$Age > 18
但它不起作用。您将如何创建新数据集?
您可以在任一条件下使用 SparkR::filter
:
> people <- createDataFrame(sqlContext, data.frame(Id=1:3, Age=c(21, 18, 30)))
> filter(people, people$Age > 18) %>% head()
Id Age
1 1 21
2 3 30
或SQL 字符串:
> filter(people, "Age > 18") %>% head()
Id Age
1 1 21
2 3 30
也可以将 SparkR::sql
函数与原始 SQL 查询一起用于已注册的 table:
> registerTempTable(people, "people"
> sql(sqlContext, "SELECT * FROM people WHERE Age > 18") %>% head()
Id Age
1 1 21
2 3 30
对于那些欣赏 R 的众多选项来完成任何给定任务的人,您还可以使用 SparkR::subset() 函数:
> people <- createDataFrame(sqlContext, data.frame(Id=1:3, Age=c(21, 18, 30)))
> people2 <- subset(people, people$Age > 18, select = c(1,2))
> head(people2)
Id Age
1 1 21
2 3 30
回答评论中的额外细节:
id <- 1:99
age <- 99:1
myRDF <- data.frame(id, age)
mySparkDF <- createDataFrame(sqlContext, myRDF)
newSparkDF <- subset(mySparkDF,
mySparkDF$id==3 | mySparkDF$id==32 | mySparkDF$id==43 | mySparkDF$id==55,
select = 1:2)
take(newSparkDF,5)
(1) Spark Jobs
id age
1 3 97
2 32 68
3 43 57
4 55 45