Arrays 从空数组创建类型化数组列
我只想解决以下问题:我想过滤掉数据帧的所有元组,其中一列中包含的字符串不包含在黑名单中,黑名单作为字符串数组(可能是空的) 例如:如果黑名单包含“四十二”和“二十三”,则所有行都将从相应列包含“四十二”或“二十三”的数据帧中筛选出来 如果Arrays 从空数组创建类型化数组列,arrays,apache-spark,Arrays,Apache Spark,我只想解决以下问题:我想过滤掉数据帧的所有元组,其中一列中包含的字符串不包含在黑名单中,黑名单作为字符串数组(可能是空的) 例如:如果黑名单包含“四十二”和“二十三”,则所有行都将从相应列包含“四十二”或“二十三”的数据帧中筛选出来 如果黑名单不为空(例如Array(“fourty-two”))且else(Array.empty[String])失败,则以下代码将成功执行: 错误消息是: org.apache.spark.sql.AnalysisException: cannot resolve
黑名单
不为空(例如Array(“fourty-two”))且else(Array.empty[String])失败,则以下代码将成功执行:
错误消息是:
org.apache.spark.sql.AnalysisException: cannot resolve 'UDF(array(), theStringColumn)' due to data type mismatch: argument 1 requires array<string> type, however, 'array()' is of array<null> type
org.apache.spark.sql.AnalysisException:由于数据类型不匹配,无法解析'UDF(array(),theStringColumn'):参数1需要数组类型,但是'array()'是数组类型
看起来,空数组似乎是无类型的。有什么好办法解决这个问题吗?你想得太多了。这里您真正需要的是
isin
:
val黑名单=Seq(“foo”、“bar”)
$“theStringColumn”.isin(黑名单:*)
此外,不要依赖ArrayType
的本地类型作为WrappedArray
。只需使用Seq
最后,要回答您的问题,您可以:
array().cast(“array”)
或:
import org.apache.spark.sql.types.{ArrayType,StringType}
array().cast(ArrayType(StringType))
那么黑名单就是一个数组?实际上我不太确定你想做什么是的,eliasah。它包含我不想在列“字符串列”中出现的字符串。您能举个例子吗?(输入、黑名单和预期输出)当然,我添加了一个示例。谢谢!我一直在寻找的解决方案是铸造。不知怎么的,我错过了。还感谢您提供有关使用Seq的提示。我试试看。
org.apache.spark.sql.AnalysisException: cannot resolve 'UDF(array(), theStringColumn)' due to data type mismatch: argument 1 requires array<string> type, however, 'array()' is of array<null> type