Arrays 如何过滤火花';带scala的s数据帧数组

Arrays 如何过滤火花';带scala的s数据帧数组,arrays,scala,apache-spark,dataframe,Arrays,Scala,Apache Spark,Dataframe,我是Scala的初学者 我有一个包含两列的数据框: 第一个是日期,第二个是单词数组 created_at:string words:array element:string 我只想保留以“#”开头的单词 我更愿意在分解数组之前进行筛选,因为大多数单词都不是以“#”开头的 我没有找到一种方法来修改数组列并应用过滤器(u.startsWith(“#”)之类的东西 可能吗?怎么做 谢谢 Pierre您可以创建一个简单的自定义项,从数组列中过滤掉不需要的单词: val df = Seq(

我是Scala的初学者

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

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

created_at:string
words:array
    element:string
我只想保留以“#”开头的单词

我更愿意在分解数组之前进行筛选,因为大多数单词都不是以“#”开头的

我没有找到一种方法来修改数组列并应用过滤器(u.startsWith(“#”)之类的东西

可能吗?怎么做

谢谢


Pierre

您可以创建一个简单的自定义项,从数组列中过滤掉不需要的单词:

val df = Seq(
  ("2018-05-01", Seq("a", "#b", "c")),
  ("2018-05-02", Seq("#d", "#e", "f"))
).toDF("created_at", "words")

def filterArray = udf( (s: Seq[String]) =>
  s.filterNot(_.startsWith("#"))
)

df.select($"created_at", filterArray($"words")).show
// +----------+----------+
// |created_at|UDF(words)|
// +----------+----------+
// |2018-05-01|    [a, c]|
// |2018-05-02|       [f]|
// +----------+----------+

您可以创建一个简单的自定义项,从数组列中过滤掉不需要的单词:

val df = Seq(
  ("2018-05-01", Seq("a", "#b", "c")),
  ("2018-05-02", Seq("#d", "#e", "f"))
).toDF("created_at", "words")

def filterArray = udf( (s: Seq[String]) =>
  s.filterNot(_.startsWith("#"))
)

df.select($"created_at", filterArray($"words")).show
// +----------+----------+
// |created_at|UDF(words)|
// +----------+----------+
// |2018-05-01|    [a, c]|
// |2018-05-02|       [f]|
// +----------+----------+
试试这个:

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
试试这个:

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

正是我想要的。谢谢正是我想要的。谢谢它应该可以工作,但它会先引爆阵列。我想避免它。thanksIt仍然是一个很好的代码示例,应该可以工作,但它首先会分解数组。我想避免它。还是一个很好的代码示例,谢谢