gpt4 book ai didi

apache-spark - 将数据帧保存到本地文件系统会导致结果为空

转载 作者:行者123 更新时间:2023-12-04 01:03:36 25 4
gpt4 key购买 nike

我们在 AWS EMR 上运行 spark 2.3.0 .以下DataFramedf ” 非空且大小适中:

scala> df.count
res0: Long = 4067

以下代码适用于编写 dfhdfs :
   scala> val hdf = spark.read.parquet("/tmp/topVendors")
hdf: org.apache.spark.sql.DataFrame = [displayName: string, cnt: bigint]

scala> hdf.count
res4: Long = 4067

但是使用相同的代码写入本地 parquetcsv文件最终得到空结果:
df.repartition(1).write.mode("overwrite").parquet("file:///tmp/topVendors")

scala> val locdf = spark.read.parquet("file:///tmp/topVendors")
org.apache.spark.sql.AnalysisException: Unable to infer schema for Parquet. It must be specified manually.;
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$9.apply(DataSource.scala:207)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$9.apply(DataSource.scala:207)
at scala.Option.getOrElse(Option.scala:121)

我们可以看到它失败的原因:
 ls -l /tmp/topVendors
total 0
-rw-r--r-- 1 hadoop hadoop 0 Jul 30 22:38 _SUCCESS

所以没有写入 Parquet 文件。

我已经尝试了 20 次,并且都尝试了 csvparquet和两个不同的 EMR服务器:在所有情况下都表现出相同的行为。

这是一个 EMR具体错误?更一般的 EC2漏洞?还有什么?此代码适用于 sparkmacOS .

如果重要 - 这是版本信息:
Release label:emr-5.13.0
Hadoop distribution:Amazon 2.8.3
Applications:Spark 2.3.0, Hive 2.3.2, Zeppelin 0.7.3

最佳答案

这不是错误,而是预期的行为。 Spark 并不真正支持写入非分布式存储(它可以在 local 模式下工作,只是因为您有共享文件系统)。

本地路径不会(仅)被解释为驱动程序上的路径(这将需要收集数据),而是每个执行程序上的本地路径。因此,每个执行器都会将自己的块写入自己的本地文件系统。

不仅输出不可读(加载数据每个执行器和驱动程序应该看到文件系统的相同状态),而且根据提交算法,甚至可能不会最终确定(从临时目录移动)。

关于apache-spark - 将数据帧保存到本地文件系统会导致结果为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51603404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com