【问题标题】:Getting AnalysisException on Databricks while create delta format在创建增量格式时在 Databricks 上获取 AnalysisException
【发布时间】:2022-10-05 16:17:31
【问题描述】:

我正在尝试将数据帧写入 .delta 格式但得到 \'AnalysisExcpetion\'

代码:

df = spark.read.format(\"csv\").option(\"header\", True).option(\"inferSchema\",True).load(\'dbfs:/mnt/raw/Sales.csv\')
df.write.format(\"delta\").mode(\"overwrite\").save(\'/mnt/bronze/sales/\')

Exception:

---------------------------------------------------------------------------
AnalysisException                         Traceback (most recent call last)
<command-3501976434710565> in <module>
      1 df = spark.read.format(\"csv\").option(\"header\", True).option(\"inferSchema\",True).load(\'dbfs:/mnt/raw/Sales.csv\')
----> 2 df.write.format(\"delta\").mode(\"overwrite\").save(\'/mnt/bronze/sales/\')

/databricks/spark/python/pyspark/sql/readwriter.py in save(self, path, format, mode, partitionBy, **options)
    738             self._jwrite.save()
    739         else:
--> 740             self._jwrite.save(path)
    741 
    742     @since(1.4)

/databricks/spark/python/lib/py4j-0.10.9.1-src.zip/py4j/java_gateway.py in __call__(self, *args)
   1302 
   1303         answer = self.gateway_client.send_command(command)
-> 1304         return_value = get_return_value(
   1305             answer, self.gateway_client, self.target_id, self.name)
   1306 

/databricks/spark/python/pyspark/sql/utils.py in deco(*a, **kw)

** 当格式为 \'delta\' 时,可以写为 \'csv\' 出错

任何线索?

    标签: azure-databricks delta-lake


    【解决方案1】:

    我尝试复制它并得到相同的错误AnalysisException。以下是相同的图像。

    我使用以下过程解决了它。当我们将数据框写入目录(销售)时:

    • 当我们使用csv格式时,它直接将零件文件写入该目录。因此,它不会引发任何错误。参考下图。
    df.write.format("csv").mode("overwrite").save('/mnt/data/bronze/sales/')
    

    • 但是当我们使用delta格式写入目录时,写入正在检查delta transactional log。由于目录中不存在它,因此会引发错误。因此,不要直接写入sales 目录,而是为您的增量文件选择一个名称,然后保存。
    df.write.format("delta").mode("overwrite").save('/mnt/data/bronze/sales/demo_delta_table')
    

    • 这将创建一个文件夹,其中包含 parquet 数据文件和 delta 日志。您可以继续使用此路径进行进一步处理。

    • 因此,请将您的代码替换为以下代码:
    df.write.format("delta").mode("overwrite").save('/mnt/bronze/sales/<delta_name>')
    
    #if sales it the name of your delta, then remove leading /
    #df.write.format("delta").mode("overwrite").save('/mnt/bronze/sales')
    

    【讨论】:

      猜你喜欢
      • 2022-11-24
      • 1970-01-01
      • 2022-10-17
      • 1970-01-01
      • 2022-06-10
      • 2022-10-25
      • 2019-02-09
      • 2022-08-02
      • 2019-02-16
      相关资源
      最近更新 更多