使用 impala jdbc 驱动程序时,not null 在 Pyspark 中不起作用
Posted
技术标签:
【中文标题】使用 impala jdbc 驱动程序时,not null 在 Pyspark 中不起作用【英文标题】:not null not working in Pyspark when using impala jdbc driver 【发布时间】:2021-04-01 04:18:04 【问题描述】:我是 Pyspark 的新手。我正在使用 Impala JDBC 驱动程序 ImpalaJDBC41.jar 。在我的 pyspark 代码中,我使用以下代码。
df = spark.read \
.format("jdbc") \
.option("url", "jdbc:impala://<instance>:21051") \
.option("query", "select dst_val,node_name,trunc(starttime,'SS') as starttime from def.tbl_dst where node_name is not null and trunc(starttime,'HH') >= trunc(hours_add(now(),-1),'HH') and trunc(starttime,'HH') < trunc(now(),'HH')") \
.option("user", "") \
.option("password", "") \
.load()
但上述不起作用,“node_name is not null”不起作用。此外 trunc(starttime,'SS') 也不起作用。任何帮助将不胜感激。
sample input data :
dst_val,node_name,starttime
BCD098,,2021-03-26 15:42:06.890000000
BCD043,HKR_NODEF,2021-03-26 20:31:09
BCD038,BCF_NODEK,2021-03-26 21:29:10
Expected output :
dst_val,node_name,starttime
BCD043,HKR_NODEF,2021-03-26 20:31:09
BCD038,BCF_NODEK,2021-03-26 21:29:10
为了调试,我正在尝试打印 df.show。但是没有用。 我正在使用 df.show() ,但它仍然显示为 null 的记录。 node_name 的数据类型是“STRING”
【问题讨论】:
【参考方案1】:你能用这个吗?
select dst_val,node_name,cast( from_timestamp(starttime,'SSS') as bigint) as starttime from def.tbl_dst where (node_name is not null or node_name<>'' ) and trunc(starttime,'HH') >= trunc(hours_add(now(),-1),'HH') and trunc(starttime,'HH') < trunc(now(),'HH')
我认为node_name
里面有空白空间,上面的sql(我添加了or node_name<>''
)会处理它。
现在,如果您有一些不可打印的字符,那么我们可能需要进行相应的检查。
编辑:由于不是 null 在 Impala 中工作,我认为这可能是一个火花问题。
【讨论】:
我累了。这没用。这些是实际的空值。 如果你从 hive 命令提示符/shell 运行它,你会得到数据吗? 如果我将其作为直接 impala 查询运行,“not null”有效,但仍会错过以毫秒为单位的时间戳cast( from_timestamp(starttime,'SSS') as bigint)
- 这会给你毫秒。以上是关于使用 impala jdbc 驱动程序时,not null 在 Pyspark 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Impala JDBC 驱动程序通过 Java 应用程序连接到 Impala
在没有 Impala JDBC 驱动程序的情况下从 R 连接到 Impala