在spark数据帧中使用Filter(python)

时间:2016-05-26 08:30:01

标签: apache-spark

我的数据框格式如下:

+------+--------+
| id   | values |
+------+--------+
| 1    |[1,2,3] |
+------+--------+
| 2    |[1,2,3] |
+------+--------+
| 3    |[1,3]   |
+------+--------+
| 4    |[1,2,8] |
      .
      .
      .

我想过滤并获取值列表列的长度等于或大于3的行。假设数据帧被调用df我正在执行以下操作:

udf_filter = udf(lambda value: len(alist)>=3,BooleanType())
filtered_data = df.filter(udf_filter("values"))

当我跑步时:

filtered_data.count()

总是给出不同的结果。怎么可能呢?

注意:

  1. df来自另一个数据框,通过抽样(同一种子)
  2. df.count总是给出相同的数字
  3. 修改 我使用以下代码从原始表中获取示例:

    df = df_original.sample(False, 0.01, 42)
    

    即使我使用seed=42如果我多次运行它也不会给出相同的结果。为了避免这种情况,我坚持使用df并且它总是给出相同的结果:

    df.persist()
    

    但我不明白的是seed没有给出相同的样本行。可能是什么原因?

0 个答案:

没有答案