【问题标题】:Can't apply the SparkR::sampleBy function to a sparklyr dataframe无法将 SparkR::sampleBy 函数应用于 sparklyr 数据帧
【发布时间】:2020-01-06 03:12:51
【问题描述】:

我使用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)

(function (classes, fdef, mtable) 中的错误:无法找到 用于签名“tbl_spark”的函数“sampleBy”的继承方法, “字符”、“列表”、“数字”'

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

【问题讨论】:

    标签: apache-spark-sql databricks sparkr sparklyr


    【解决方案1】:

    是的,有! SparkSQL 表是SparkR 和sparklyr 之间的通用接口。该错误告诉您类型不匹配,但如果您使用 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 对象。

    【讨论】:

      猜你喜欢
      • 2019-01-01
      • 2020-03-05
      • 1970-01-01
      • 2019-09-04
      • 1970-01-01
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多