我是pyspark的新手,正在学习从Beautiful汤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>Cityn </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对象而不是Tags中提取的文本内容成功地创建了pyspark-df来证实这一点,一切都很好。
有人能解释一下为什么没有推断出这个模式吗?如何修复此错误并创建包含bs4.element.Tag对象的pyspark数据帧?
p.s我尝试将递归极限增加到更高的值,但上述错误仍然存在。将recursionlimit增加到一个非常大的值会导致seg故障。
我遇到了类似的问题,在放入createDataFrame
之前,我手动将bs4.element.Tag
内容强制转换为字符串