从 hdfs 读取 ocr 文件后,难以置信地触发数据帧



我在Ambari上使用Spark 2.1.1和hadoop 2.6时遇到问题。我首先在本地计算机上测试了我的代码(单节点,本地文件(,一切按预期工作:

from pyspark.sql import SparkSession
spark = SparkSession
.builder
.master('yarn')
.appName('localTest')
.getOrCreate()
data = spark.read.format('orc').load('mydata/*.orc')
data.select('colname').na.drop().describe(['colname']).show()
+-------+------------------+
|summary| colname          |
+-------+------------------+
|  count|           1688264|
|   mean|17.963293650793652|
| stddev|5.9136724822401425|
|    min|               0.5|
|    max|              87.5|
+-------+------------------+

这些值在表面上是合理的。

现在我把我的数据上传到一个Hadoop集群(ambari设置,yarn,11个节点(,并使用hadoop fs -put /home/username/mydata /mydata将其推送到hdfs

中。现在我测试了相同的代码,该代码以下表结尾:

from pyspark.sql import SparkSession
spark = SparkSession
.builder
.master('yarn')
.appName('localTest')
.getOrCreate()
data = spark.read.format('orc').load('hdfs:///mydata/*.orc')
data.select('colname').na.drop().describe(['colname']).show()
+-------+------------------+
|summary| colname          |
+-------+------------------+
|  count|           2246009|
|   mean|1525.5387403802445|
| stddev|16250.611372902456|
|    min|         -413050.0|
|    max|       1.6385821E7|
+-------+------------------+

但是另一件事让我完全感到困惑 ->如果我将mydata/*.orc更改为mydata/any_single_file.orc并将hdfs:///mydata/*.orc更改为hdfs:///mydata/any_single_file.orc两个表(群集,本地pc(是相同的......

有谁知道更多关于这种奇怪的行为吗?

多谢!

经过一周的搜索,我的"解决方案"是在某些文件中,模式略有不同(或多或少是一列(,虽然在 parquet 中实现了模式合并,orc 目前不支持模式合并。 https://issues.apache.org/jira/plugins/servlet/mobile#issue/SPARK-11412

所以我的解决方法是一个接一个地加载 orc 文件,然后我使用df.write.parquet()方法来转换它们。转换完成后。我可以在文件路径中使用 *.parquet 而不是 *.orc 将它们一起加载。

相关内容

  • 没有找到相关文章

最新更新