如何从 Spark DataFrame 中选择稳定的行子集?

Posted

技术标签:

【中文标题】如何从 Spark DataFrame 中选择稳定的行子集?【英文标题】:How can I select a stable subset of rows from a Spark DataFrame? 【发布时间】:2018-01-19 15:37:25 【问题描述】:

我已将文件加载到 Zeppelin 笔记本中的 DataFrame 中,如下所示:

val df = spark.read.format("com.databricks.spark.csv").load("some_file").toDF("c1", "c2", "c3")

这个 DataFrame 有超过 1000 万行,我想从行的一个子集开始工作,所以我使用了 limit:

val df_small = df.limit(1000)

但是,现在当我尝试根据其中一列的字符串值过滤 DataFrame 时,每次运行以下命令时都会得到 不同的结果

df_small.filter($"c1" LIKE "something").show()

如何获取对于我运行的每个过滤器都保持稳定的 df 子集?

【问题讨论】:

您应该在对有限的数据帧应用操作之前对其进行持久化或缓存。 【参考方案1】:

Spark 作为延迟加载工作,因此只有在语句 .show 上面的 2 个语句才会执行。您可以将df_small 写入文件并每次单独读取,或者执行df_small.cache()

【讨论】:

以上是关于如何从 Spark DataFrame 中选择稳定的行子集?的主要内容,如果未能解决你的问题,请参考以下文章

从 Spark 中的 DataFrame 中过滤和选择数据

基于列索引的 Spark Dataframe 选择

从 Spark GroupedData 对象中选择随机项

在 Spark Dataframe 中选择一系列列[重复]

如何根据另一列的值从 Spark DataFrame 中选择特定列?

如何从 Spark 2.0 中的 DataFrame 列创建数据集?