我在 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 个节点),并使用以下命令将其推送到 hdfs:hadoop fs -put /home/username/mydata /mydata
现在我测试了相同的代码,其结尾如下表:
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
to mydata/any_single_file.orc
and hdfs:///mydata/*.orc
to hdfs:///mydata/any_single_file.orc
两个表(集群、本地电脑)是相同的......
有谁对这种奇怪的行为了解更多吗?
多谢!
经过一周的搜索“解决方案”后,我发现在某些文件中,架构有点不同(或多或少有一列),虽然 parquet 中实现了架构合并,但 orc 目前不支持架构合并..https://issues.apache.org/jira/plugins/servlet/mobile#issue/SPARK-11412 https://issues.apache.org/jira/plugins/servlet/mobile#issue/SPARK-11412
所以我的解决方法是依次加载 orc 文件,然后我使用df.write.parquet()
方法来转换它们。转换完成后。我可以在文件路径中使用 *.parquet 而不是 *.orc 将它们全部加载在一起。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)