【问题标题】:Cannot recognize the predicate 'Column<b'. Pyspark | Delta-lake无法识别谓词“Column<b”。派斯帕克 |三角洲湖
【发布时间】:2020-10-27 21:33:52
【问题描述】:

在尝试使用分区为日期(yyyy-MM-dd)和时间(hhmm)对 delta Lake 表进行重新分区时。 我收到错误:

File "/usr/local/lib/python3.7/site-packages/pyspark/sql/readwriter.py", line 739, in save
    self._jwrite.save(path)
File "/usr/local/lib/python3.7/site-packages/py4j/java_gateway.py", line 1257, in __call__
    answer, self.gateway_client, self.target_id, self.name)
File "/usr/local/lib/python3.7/site-packages/pyspark/sql/utils.py", line 69, in deco
    raise AnalysisException(s.split(': ', 1)[1], stackTrace)
    pyspark.sql.utils.AnalysisException: "Cannot recognize the predicate 'Column<b'((partitionTime = 1357) AND (partitionDate = 2020-10-27))'>';"

我可以单独查询两个分区,但是当我同时查询两个分区时,我遇到了错误

spark \
 .read.format("delta") \
 .load(table_path) \
 .where(((sf.col("partitionTime") == "1357") & (sf.col("partitionDate") == "2020-10-27"))) \
 .repartition(n_partitions) \
 .write \
 .option("dataChange", "false") \
 .format("delta") \
 .mode("overwrite") \
 .option("replaceWhere", ((sf.col("partitionTime") == "1357") & (sf.col("partitionDate") == "2020-10-27") )) \
                .save(table_path)

想知道是什么导致了这个问题! 我确实遵循了来自delta.io的文档

【问题讨论】:

    标签: apache-spark pyspark delta-lake


    【解决方案1】:

    试试这样:

    .option("replaceWhere", "partitionTime='1357' AND partitionDate='2020-10-27'")
    

    看起来replaceWhere 选项没有采用也用于where 的 PySpark 语法。

    replaceWhere 选项中,您必须使用 SQL 语法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 2012-07-13
      • 1970-01-01
      相关资源
      最近更新 更多