无法将 SparkR::sampleBy 函数应用于 Sparklyr 数据帧



我已经使用df_pqt_tbl <- spark_read_parquet(...)函数读取了一个镶木地板文件。 我的环境是数据砖。 我想使用SparkR::sampleBy函数进行分层采样,但出现错误:

class(df_pqt_tbl)
df_train <- SparkR::sampleBy(df_pqt_tbl, col = 'labels',
fractions = list('0'=0.7, '1'=0.7),
seed = 12345)

(函数(类、fdef、mtable(中的错误:找不到 签名 '"tbl_spark" 函数 'sampleBy' 的继承方法, "字符"、"列表"、"数字">

有没有办法转换火花数据框中tbl_spark,以便我可以在其上使用sampleBy函数?

是的,有! SparkSQL表是SparkRsparklyr之间的通用接口。 该错误告诉您类型不匹配,但是如果您使用SparkSQL表,则可以找到共同点。

在您的情况下,请使用SparkR中的sql()函数,然后从sparklyr表中选择全部。

## Read parquet using sparklyr
df_pqt_tbl <- spark_read_parquet(sc, "path", name = "sparklyr_tbl")
## Use SparkSQL to access in SparkR
pqt_tblDF <- sparkR::sql("select * from sparklyr_tbl")
## Now use functions from SparkR
df_train <- sparkR::sampleBy(df_pqt_tbl, col = 'labels',
fractions = list('0'=0.7, '1'=0.7),
seed = 12345)

要采用另一种方式,您需要从SparkR创建一个临时视图,然后将该视图读入sparklyr对象。

sparkR::createOrReplaceTempView(sparkRDF, "sparkSQL_table")

然后使用

sparklyr_tbl <-  sparklyr::spark_read_table(sc, "sparkSQL_table")

然后,可以将sparklyr中的函数应用于sparklyr_tbl对象。

最新更新