如何使用scala过滤spark的数据帧数组

时间:2018-05-16 21:49:30

标签: arrays scala apache-spark dataframe

我是Scala的初学者。

我有一个包含2列的数据框:

第一个是日期,第二个是单词数组。

created_at:string
words:array
    element:string

我希望只留下以'#'开头的单词

我希望在爆炸数组之前制作过滤器,因为大多数单词都不是以'#'开头

我没有找到修改数组列并应用类似过滤器(_。startsWith(“#”))的方法。

有可能吗?怎么样?

感谢的

皮尔

2 个答案:

答案 0 :(得分:3)

您可以创建一个简单的UDF来过滤掉数组列中不需要的单词:

= form_for @user,
           url: user_path,
           html: { class: 'form-class', method: :post } do |f|
  = f.text_field :name,
                 class: 'name-class'
  = f.select :cars_ids,
             options_from_collection_for_select(Car.all, :id, :name),
             {},
             { multiple: true,
               class: 'cars-class', 
               data: { placeholder: 'Select one ore more...' } }
  = f.submit 'Register',
             class: 'button-class'

答案 1 :(得分:0)

试试这个:

import org.apache.spark.sql.functions._ 

df.select(explode(col("words")).as("word"), col("created_at")).
       where("word LIKE '#%'").
       groupBy(col("created_at")).
       agg(collect_set(col("word")).as("words")).
       show