【发布时间】: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