非空WrappedArray过滤数据帧

问题描述 投票:5回答:2

我的问题是,我有一个列表,这些不属于空找到。当我使用的过滤功能不为空,比我还得到每一行。

我的程序代码如下所示:

...    
val csc = new CassandraSQLContext(sc)
val df = csc.sql("SELECT * FROM test").toDF()

val wrapped = df.select("fahrspur_liste")
wrapped.printSchema

fahrspur_liste包含包裹阵列和本专栏我来分析。当我运行的代码,比我得到这个结构,我的包裹阵列和这些条目:

    root
 |-- fahrspur_liste: array (nullable = true)
 |    |-- element: long (containsNull = true)

+--------------+
|fahrspur_liste|
+--------------+
|            []|
|            []|
|          [56]|
|            []|
|          [36]|
|            []|
|            []|
|          [34]|
|            []|
|            []|
|            []|
|            []|
|            []|
|            []|
|            []|
|         [103]|
|            []|
|         [136]|
|            []|
|          [77]|
+--------------+
only showing top 20 rows

现在我要过滤这些行,让我只有条目[56],[36],[34],[103],...

我如何写一个过滤功能,我得到的只有这些行,它包含了一些?

arrays scala apache-spark spark-dataframe
2个回答
3
投票

您可以在星火的udf做到这一点:

val removeEmpty = udf((array: Seq[Long]) => !array.isEmpty)

val df2 = df.filter(removeEmpty($"fahrspur_liste"))

这里的udf检查该数组为空或没有。然后,过滤功能将删除那些回来为真。


14
投票

我不认为你需要在这里使用UDF。

你可以只使用size方法和过滤器与阵列尺寸所有那些行= 0

df.filter(""" size(fahrspur_liste) != 0 """)
© www.soinside.com 2019 - 2024. All rights reserved.