2015-04-14 61 views
1

我有一个在某些列中有空值和空值的配置单元表。我的表中的空值表示是\N。 我想在Scala中选择列a不为空的行。我试过用在Scala中过滤空值

a。 if (a.equals("\\N"))

b。 if (!Option(a).getOrElse("").isEmpty)

c。使用length(trim(a))

这些选项都不适用于我的代码,过滤器不起作用或所有行都被排除。

有没有人有任何建议?

+1

稍多一点的代码在这里可能会有所帮助。当我创建'val a =“\\ N”'并用你的选项(a)进行测试时,我得到'Boolean = true',这表明这应该起作用。更多关于你的桌子,或者你的过滤(最好是两者)都会有所帮助。 – ohruunuruus

+1

你如何通过scala访问配置单元? –

+0

从行选择中推断出'a'是什么类型?另外哪个错误会从过滤中弹出? – elm

回答

0

根据https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Transform,Hive的\ N是一个字符串,即“\ N”,但是在Java中,因此在Scala中表示为“\ N”,可以使用{scala.Predef.String = java来匹配。 lang.String} .matches(“\\ N”),如下测试:

val s = "\\N" 
println(s.matches("\\\\N")) // prints true 

如果不为你工作,请提供有关如何访问的蜂巢表和蜂巢的版本,所以我可以尝试复制错误。