我正在使用JDBC2.4版来读取一些带有Postgres驱动程序的PySpark。
df = spark.read.jdbc(url=data_base_url, table="tablename", properties=properties)
其中一列是时间戳列,我想像这样过滤它:
df_new_data = df.where(df.ts > last_datetime )
这样,过滤器被下推为SQL查询,但datetime格式不正确。所以我尝试了这种方法
df_new_data = df.where(df.ts > F.date_format( F.lit(last_datetime), "y-MM-dd'T'hh:mm:ss.SSS") )
但这样过滤器就不会再往下推了。
有人能解释一下为什么会这样吗?
发布于 2018-12-07 18:26:11
在从数据库表加载数据时,如果您想将查询下推到数据库并获得较少的结果行,而不是提供“表”,您可以提供“查询”并将结果作为DataFrame返回。这样,我们就可以利用数据库引擎来处理查询,并只将结果返回给Spark。
table参数标识要读取的JDBC表。在查询FROM子句中,您可以使用任何有效的内容。请注意,查询中必须提供别名。
pushdown_query = "(select * from employees where emp_no < 10008) emp_alias"
df = spark.read.jdbc(url=jdbcUrl, table=pushdown_query, properties=connectionProperties)
df.show()
https://stackoverflow.com/questions/53652862
复制相似问题