1

我正在使用 pyspark 和 hivecontext.sql,我想从我的数据中过滤掉所有 null 和空值。

所以我用简单的sql命令先过滤掉了空值,但是没有用。

我的代码:

hiveContext.sql("select column1 from table where column2 is not null")

但它在没有表达式“其中 column2 不为空”的情况下工作

错误:

Py4JavaError: An error occurred while calling o577.showString

我认为这是由于我的选择是错误的。

数据示例:

column 1 | column 2
null     |   1
null     |   2
1        |   3
2        |   4
null     |   2
3        |   8

客观的:

column 1 | column 2
1        |   3
2        |   4
3        |   8

Tks

4

4 回答 4

1

我们不能将 Hive 表名直接传递给 Hive 上下文 sql 方法,因为它不理解 Hive 表名。读取 Hive 表的一种方法是使用 pysaprk shell。

我们需要注册从读取 hive 表中获得的数据帧。然后我们可以运行 SQL 查询。

于 2017-07-21T15:57:15.350 回答
1

您必须提供 database_name.table 并运行相同的查询,它将起作用。请让我知道这是否有帮助

于 2017-07-21T16:25:09.903 回答
1

它对我有用:

df.na.drop(subset=["column1"])
于 2017-07-21T19:15:37.730 回答
0
Have you entered null values manually?
If yes then it will treat those as normal strings,
I tried following two use cases

dbname.person table in hive

name    age

aaa     null // this null is entered manually -case 1
Andy    30
Justin  19
okay       NULL // this null came as this field was left blank. case 2

---------------------------------
hiveContext.sql("select * from dbname.person").show();
+------+----+
|   name| age|
+------+----+
|  aaa |null|
|  Andy|  30|
|Justin|  19|
|  okay|null|
+------+----+

-----------------------------
case 2 
hiveContext.sql("select * from dbname.person where age is not null").show();
+------+----+
|  name|age |
+------+----+
|  aaa |null|
|  Andy| 30 |
|Justin| 19 |
+------+----+
------------------------------------
case 1
hiveContext.sql("select * from dbname.person where age!= 'null'").show();
+------+----+
|  name| age|
+------+----+
|  Andy|  30|
|Justin|  19|
|  okay|null|
+------+----+
------------------------------------

我希望上述用例能够消除您对过滤空值的疑虑。如果您要查询在 spark 中注册的表,请使用 sqlContext。

于 2017-07-21T18:18:43.030 回答