我最近一直在使用Jupyter笔记本上的pyspark。我正在尝试从镶木地板文件中读取数据,以便在Neo4J中使用这些数据构建图形。我可以成功地将数据从HDFS加载到数据帧中。
当数据大小有限时,一切正常,我可以使用collect()方法提取python列表然后循环它。当数据大小增加时,显然我得到一个“java堆大小”错误(数据框包含超过1300万和几十万行分布在五列上)。
我试过使用foreach(f)但是我得到“元组索引超出范围”。 当我使用df.select('columnName')。show()时,我能够查看数据;但问题是我需要提取值以便使用Neo4j会话构建图形(session.run('Cypher query')
我的问题是:当我有大量数据时,有没有办法循环数据框的行(因此从行中提取数据)?
P.S:我正在使用这些图书馆:findspark,pyspark,neo4j.v1
答案 0 :(得分:1)
我看到没有答案。好吧,我正在发布如何解决问题,以防将来有人遇到同样的问题。完全相同的代码在python 2内核上工作但在python 3上没有。 我不得不安装一个支持pyhton 2.7的旧版jupyter,并且完美无缺(如果你在一个服务器上工作,你有完全的权限和互联网连接,你可能只需要安装一个新的内核除了第一个) 。
,我没有使用collect(),而是使用了foreachPartition()