当前位置: 首页 > 知识库问答 >
问题:

用户类引发异常:org。阿帕奇。火花sql。AnalysisException:无法推断拼花地板的架构。必须手动指定

鲜于河
2023-03-14

我将spark java代码实现为,数据集输入=spark。读取()。拼花地板(configuration.getInputDataLocation());

但是inputDataLocation(Azure存储帐户容器中的文件夹)可能没有任何数据,并且在这种情况下引发异常,用户类引发异常:org。阿帕奇。火花sql。AnalysisException:无法推断拼花地板的架构。必须手动指定。

有没有一个简单的方法来检查文件夹是否事先是空的,然后只有我处理上面写的火花java代码行。

共有1个答案

邴兴为
2023-03-14

为什么不在输入目录中尝试读取以检查它是否存在?

       final boolean exists;
            try {
                exists = file.getFileSystem(spark.sparkContext().hadoopConfiguration()).getFileStatus(file).isFile();

//exists = dir.getFileSystem(spark.sparkContext().hadoopConfiguration()).listStatus(dir).length // (0 length is an empty dir)
            } catch (IOException e) {
                throw new UncheckedIOException(e);
            }
    
            if (exists) {
                return spark.read().parquet(configuration.getInputDataLocation());
            } else {
                LOG.warn("File directory '{}' does not exist", file);
                return spark.emptyDataset(SOME_ENCODER);
            }
        }
 类似资料:
  • 我正在运行EMR笔记本中的所有代码。 火花版本 temp_df.print模式 温度df。显示(2) 温度df。写拼花地板(path='s3://project7878/clean\u data/temperatures.parquet',mode='overwrite',partitionBy='year') 火花阅读拼花地板(path='s3://project7878/clean\u dat

  • 我在尝试将spark数据帧的一列从十六进制字符串转换为双精度字符串时遇到了一个问题。我有以下代码: 我无法共享txs数据帧的内容,但以下是元数据: 但当我运行这个程序时,我得到了一个错误: 错误:类型不匹配;找到:MsgRow需要:org.apache.spark.sql.行MsgRow(row.getLong(0),row.getString(1),row.getString(2),hex2in

  • 这与上面文章中给出的答案不同 我收到一个错误,显示 当我尝试使用Spark 2.1.0读取拼花地板文件时 我已经检查过了,通过Hue WebPortal查看impala表,文件/表不是空的。另外,我存储在类似目录中的其他文件读起来也非常好。对于记录,文件名包含连字符,但没有下划线或句号/句点。 因此,在加载拼花地板文件时,以下帖子中的答案都无法推断模式 有什么想法吗?

  • 我正在尝试创建AWS Glue ETL作业,将存储在S3中的拼花文件中的数据加载到Redshift表中。拼花文件是使用带有“简单”文件模式选项的熊猫写入S3中的多个文件夹的。布局如下所示: s3://bucket/parquet\u table/01/file\u 1。拼花地板 s3://bucket/parquet\u table/01/file\u 2。拼花地板 S3://桶/parquet_

  • 由于,我检查了一个spark作业的输出拼花文件,该作业总是会发出声音。我在Cloudera 5.13.1上使用了 我注意到拼花地板排的大小是不均匀的。第一排和最后一排的人很多。剩下的真的很小。。。 拼花地板工具的缩短输出,: 这是已知的臭虫吗?如何在Spark中设置拼花地板块大小(行组大小)? 编辑: Spark应用程序的作用是:它读取一个大的AVRO文件,然后通过两个分区键(使用