无法将 SparkR::sampleBy 函数应用于 sparklyr 数据框

Can't apply the SparkR::sampleBy function to a sparklyr dataframe

我使用 df_pqt_tbl <- spark_read_parquet(...) 函数读取了镶木地板文件。 我的环境是 Databricks。 我想使用 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)

Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘sampleBy’ for signature ‘"tbl_spark", "character", "list", "numeric"’

有没有办法在 spark 数据帧 中转换 tbl_spark 以便我可以使用 sampleBy函数就可以了吗?

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

在您的情况下,使用 SparkR 中的 sql() 函数和 sparklyr table 中的 select 函数。

## 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 对象。