【问题标题】:How to read ORC files without metastore in pyspark 2.0如何在 pyspark 2.0 中读取没有 Metastore 的 ORC 文件
【发布时间】:2016-12-28 04:05:33
【问题描述】:

我想使用没有 Metastore 的 pyspark 2.0 读取一些 ORC 文件。理论上,这样做是可行的,因为数据模式嵌入在 ORC 文件中。但这是我得到的:

[me@hostname ~]$/usr/local/spark-2.0.0-bin-hadoop2.6/bin/pyspark Python 2.7.11(默认,2016 年 2 月 18 日,13:54:48) [GCC 4.4.7 20120313 (Red Hat 4.4.7-16)] 在 linux2 上 键入“帮助”、“版权”、“信用”或“许可”以获取更多信息。 将默认日志级别设置为“WARN”。 要调整日志记录级别,请使用 sc.setLogLevel(newLevel)。 欢迎来到 ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /__ / .__/\_,_/_/ /_/\_\ 版本 2.0.0 /_/ 使用 Python 版本 2.7.11(默认,2016 年 2 月 18 日 13:54:48) SparkSession 可用作“火花”。 >>> df=spark.read.orc('/my/orc/file') 16/08/21 22:29:38 WARN util.NativeCodeLoader:无法为您的平台加载 native-hadoop 库...在适用的情况下使用内置 java 类 16/08/21 22:30:00 错误 metastore.RetryingHMSHandler:AlreadyExistsException(消息:数据库默认已存在) 在 org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.create_database(HiveMetaStore.java:891) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.apache.hadoop.hive.metastore.RetryingHMSHandler.invoke(RetryingHMSHandler.java:107) 在 com.sun.proxy.$Proxy21.create_database(未知来源) 在 org.apache.hadoop.hive.metastore.HiveMetaStoreClient.createDatabase(HiveMetaStoreClient.java:644) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.invoke(RetryingMetaStoreClient.java:156) 在 com.sun.proxy.$Proxy22.createDatabase(未知来源) 在 org.apache.hadoop.hive.ql.metadata.Hive.createDatabase(Hive.java:306) 在 org.apache.spark.sql.hive.client.HiveClientImpl$$anonfun$createDatabase$1.apply$mcV$sp(HiveClientImpl.scala:291) 在 org.apache.spark.sql.hive.client.HiveClientImpl$$anonfun$createDatabase$1.apply(HiveClientImpl.scala:291) 在 org.apache.spark.sql.hive.client.HiveClientImpl$$anonfun$createDatabase$1.apply(HiveClientImpl.scala:291) 在 org.apache.spark.sql.hive.client.HiveClientImpl$$anonfun$withHiveState$1.apply(HiveClientImpl.scala:262) 在 org.apache.spark.sql.hive.client.HiveClientImpl.liftedTree1$1(HiveClientImpl.scala:209) 在 org.apache.spark.sql.hive.client.HiveClientImpl.retryLocked(HiveClientImpl.scala:208) 在 org.apache.spark.sql.hive.client.HiveClientImpl.withHiveState(HiveClientImpl.scala:251) 在 org.apache.spark.sql.hive.client.HiveClientImpl.createDatabase(HiveClientImpl.scala:290) 在 org.apache.spark.sql.hive.HiveExternalCatalog$$anonfun$createDatabase$1.apply$mcV$sp(HiveExternalCatalog.scala:99) 在 org.apache.spark.sql.hive.HiveExternalCatalog$$anonfun$createDatabase$1.apply(HiveExternalCatalog.scala:99) 在 org.apache.spark.sql.hive.HiveExternalCatalog$$anonfun$createDatabase$1.apply(HiveExternalCatalog.scala:99) 在 org.apache.spark.sql.hive.HiveExternalCatalog.withClient(HiveExternalCatalog.scala:72) 在 org.apache.spark.sql.hive.HiveExternalCatalog.createDatabase(HiveExternalCatalog.scala:98) 在 org.apache.spark.sql.catalyst.catalog.SessionCatalog.createDatabase(SessionCatalog.scala:147) 在 org.apache.spark.sql.catalyst.catalog.SessionCatalog.(SessionCatalog.scala:89) 在 org.apache.spark.sql.hive.HiveSessionCatalog.(HiveSessionCatalog.scala:51) 在 org.apache.spark.sql.hive.HiveSessionState.catalog$lzycompute(HiveSessionState.scala:49) 在 org.apache.spark.sql.hive.HiveSessionState.catalog(HiveSessionState.scala:48) 在 org.apache.spark.sql.hive.HiveSessionState$$anon$1.(HiveSessionState.scala:63) 在 org.apache.spark.sql.hive.HiveSessionState.analyzer$lzycompute(HiveSessionState.scala:63) 在 org.apache.spark.sql.hive.HiveSessionState.analyzer(HiveSessionState.scala:62) 在 org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:49) 在 org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:64) 在 org.apache.spark.sql.SparkSession.baseRelationToDataFrame(SparkSession.scala:382) 在 org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:143) 在 org.apache.spark.sql.DataFrameReader.orc(DataFrameReader.scala:450) 在 org.apache.spark.sql.DataFrameReader.orc(DataFrameReader.scala:439) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:237) 在 py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) 在 py4j.Gateway.invoke(Gateway.java:280) 在 py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:128) 在 py4j.commands.CallCommand.execute(CallCommand.java:79) 在 py4j.GatewayConnection.run(GatewayConnection.java:211) 在 java.lang.Thread.run(Thread.java:745) >>>

读取 ORC 文件的正确方法是什么?

【问题讨论】:

  • 是什么让您认为问题是 ORC 特有的?
  • 那里没有说错误ERROR metastore.RetryingHMSHandler: AlreadyExistsException(message:Database default already exists)
  • @zero323:它不是特定于 ORC 的。我在阅读 Parquet 文件时遇到了同样的问题。所以这个问题可能与所有具有嵌入式模式的文件有关。但是我真正想阅读的文件是ORC格式的。我只是不在乎 Parquet 和其他格式。
  • @abhiieor 但问题是,我没有任何数据库设置。它说“数据库默认已存在”,但默认数据库在哪里?

标签: apache-spark pyspark orc


【解决方案1】:

我发现了问题所在。虽然 pyspark 报告了 ERROR,但实际上将数据从 ORC 文件加载到数据框中并没有失败。尽管有错误消息,但可以毫无问题地引用返回的数据帧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2015-11-25
    • 2015-12-19
    • 2021-12-03
    • 2015-06-27
    • 1970-01-01
    相关资源
    最近更新 更多