我的问题是我必须在列表中找到这些不是空的。当我使用过滤器函数不是null时,我也得到每一行。
我的程序代码如下:
...
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],......
如何编写过滤函数,我只得到这些包含数字的行?
答案 0 :(得分:12)
答案 1 :(得分:3)
您可以使用Spark中的udf
执行此操作:
val removeEmpty = udf((array: Seq[Long]) => !array.isEmpty)
val df2 = df.filter(removeEmpty($"fahrspur_liste"))
这里udf
检查数组是否为空。然后,过滤器功能将删除那些返回为真的。