PySpark - Parquet - 调用 None.None 时发生错误

Posted

技术标签:

【中文标题】PySpark - Parquet - 调用 None.None 时发生错误【英文标题】:PySpark - Parquet - An error occurred while calling None.None 【发布时间】:2017-07-21 11:27:38 【问题描述】:

我有一个 hdf5 文件,其中包含大约 200 个组。因此,对于每个组,我编写了一个代码,将它们转换为镶木地板文件:

fastparquet.write(dir_name + '/' + metricname + '.parq', groupDataFrame)

在我尝试阅读它们之后,它工作得很好,除了一些我收到错误消息的指标:(我使用 HDFVIEW 来查看这个指标的值是否有问题,但我什么也没看到,只有整数值)

ERROR:root:Exception while sending command.
Traceback (most recent call last):
  File "C:\prog\spark-2.1.0-bin-hadoop2.6\python\lib\py4j-0.10.4-src.zip\py4j\java_gateway.py", line 883, in send_command
    response = connection.send_command(command)
  File "C:\prog\spark-2.1.0-bin-hadoop2.6\python\lib\py4j-0.10.4-src.zip\py4j\java_gateway.py", line 1040, in send_command
    "Error while receiving", e, proto.ERROR_ON_RECEIVE)
Py4JNetworkError: Error while receiving
---------------------------------------------------------------------------
Py4JError                                 Traceback (most recent call last)
C:\Users\uids2739\AppData\Local\Continuum\Anaconda2\lib\site-packages\IPython\core\interactiveshell.pyc in run_code(self, code_obj, result)
   2896             if result is not None:
   2897                 result.error_in_exec = sys.exc_info()[1]
-> 2898             self.showtraceback()
   2899         else:
   2900             outflag = 0

C:\Users\uids2739\AppData\Local\Continuum\Anaconda2\lib\site-packages\IPython\core\interactiveshell.pyc in showtraceback(self, exc_tuple, filename, tb_offset, exception_only)
   1824                                             value, tb, tb_offset=tb_offset)
   1825 
-> 1826                     self._showtraceback(etype, value, stb)
   1827                     if self.call_pdb:
   1828                         # drop into debugger

C:\Users\uids2739\AppData\Local\Continuum\Anaconda2\lib\site-packages\ipykernel\zmqshell.pyc in _showtraceback(self, etype, evalue, stb)
    509             u'traceback' : stb,
    510             u'ename' : unicode_type(etype.__name__),
--> 511             u'evalue' : py3compat.safe_unicode(evalue),
    512         
    513 

C:\Users\uids2739\AppData\Local\Continuum\Anaconda2\lib\site-packages\ipython_genutils\py3compat.pyc in safe_unicode(e)
     63     """
     64     try:
---> 65         return unicode_type(e)
     66     except UnicodeError:
     67         pass

C:\prog\spark-2.1.0-bin-hadoop2.6\python\lib\py4j-0.10.4-src.zip\py4j\protocol.py in __str__(self)
    419         gateway_client = self.java_exception._gateway_client
    420         answer = gateway_client.send_command(self.exception_cmd)
--> 421         return_value = get_return_value(answer, gateway_client, None, None)
    422         return "0: 1".format(self.errmsg, return_value)

C:\prog\spark-2.1.0-bin-hadoop2.6\python\lib\py4j-0.10.4-src.zip\py4j\protocol.py in get_return_value(answer, gateway_client, target_id, name)
    325             raise Py4JError(
    326                 "An error occurred while calling 012".
--> 327                 format(target_id, ".", name))
    328     else:
    329         type = answer[1]

Py4JError: An error occurred while calling None.None

感谢您的帮助。

【问题讨论】:

【参考方案1】:

所以这是类型的问题,因为镶木地板不支持所有。 我以这样的 sql 形式发出读取请求:

df = spark.sql("SELECT * FROM parquet.`file.parq`")

给我错误信息:

AnalysisException: u'Job aborted due to stage failure: Task 0 in stage 46.0 failed 1 times, most recent failure: Lost task 0.0 in stage 46.0 (TID 46, localhost, executor driver): org.apache.spark.sql.AnalysisException: Parquet type not supported: INT32

所以我在创建这个 parquet 文件时将类型 int32 更改为 float,问题就解决了。

【讨论】:

以上是关于PySpark - Parquet - 调用 None.None 时发生错误的主要内容,如果未能解决你的问题,请参考以下文章

pyspark write.parquet() 创建一个文件夹而不是 parquet 文件

在 parquet 文件顶部从 pyspark 代码创建一个表

在 PySpark 中指定最大 Parquet 块大小

读取 PySpark 中的所有分区 parquet 文件

使用 pyspark 同时编写 parquet 文件

在 HIVE 中使用 CDH 5.4 和 Spark 1.3.0 和 Parquet 表的 PySpark 中的 Parquet 错误