【问题标题】:maximum recursion depth exceeded converting pandas dataframe to pyspark dataframe超过最大递归深度将 pandas 数据帧转换为 pyspark 数据帧
【发布时间】:2019-08-28 13:22:55
【问题描述】:

我对 pyspark 非常陌生,正在学习从 Beautiful soup bs4.element.Tag 对象列表中创建 pyspark 数据框

table = bsoup.findAll(name='tr')
table = [tr.findAll(name='td') for tr in table]
table = [list(tr) for tr in table]

table
[[<td>City\n    </td>, <td>Country \n  </td>],
[<td>Paris</td>, <td>France</td>],
[<td>Amsterdam</td>, <td>Holland</td>]]

type(table[0][0])
bs4.element.Tag


spsession = SparkSession(sc)
spark_df = spsession.createDataFrame(table)

<path>/venv/lib/python2.7/site-packages/pyspark/sql/types.py in 
_infer_type(obj)
    967     else:
    968         try:
--> 969             return _infer_schema(obj)
    970         except TypeError:
    971             raise TypeError("not supported type: %s" % 
type(obj))

RuntimeError: maximum recursion depth exceeded

看起来问题发生在模式推断期间,因为由于某种原因没有推断出 bs4.element.Tag 类型

我通过从 bs4.element.Tag 对象而不是标签中提取的文本内容成功创建 pyspark df 来确认这一点,并且一切正常。

有人可以解释为什么没有推断出架构吗?以及如何修复此错误并创建包含 bs4.element.Tag 对象的 pyspark 数据框?

p.s 我尝试将递归限制增加到更高的值,但上述错误仍然存​​在。 将递归限制增加到一个非常大的值会导致段错误。

【问题讨论】:

  • 您为什么要尝试将 pandas DataFrame 转换为 Spark DataFrame?这对我来说没有多大意义。
  • 我编辑了帖子以摆脱 pandas df 以避免任何混淆。现在我只是试图从 beautifulsoup 标签列表中创建一个 pyspark 数据框,但仍然遇到“RuntimeError:最大调用 Python 对象时超出递归深度”

标签: python apache-spark beautifulsoup pyspark spark-dataframe


【解决方案1】:

我遇到了类似的问题,我手动将 bs4.element.Tag 转换为字符串,然后再放入 createDataFrame

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2018-06-20
    • 2017-09-18
    • 2017-02-04
    相关资源
    最近更新 更多