带有 pySpark 的 GraphFrames
GraphFrames with pySpark
我想将 GraphFrames 与 PySpark 一起使用(目前在 Google Dataproc 上使用 Spark v2.3.3)。
使用
安装 GraphFrames 后
pip install graphframes
我尝试运行下面的代码:
from graphframes import *
localVertices = [(1,"A"), (2,"B"), (3, "C")]
localEdges = [(1,2,"love"), (2,1,"hate"), (2,3,"follow")]
v = sqlContext.createDataFrame(localVertices, ["id", "name"])
e = sqlContext.createDataFrame(localEdges, ["src", "dst", "action"])
g = GraphFrame(v, e)
但是我得到这个错误:
Py4JJavaError: An error occurred while calling o301.loadClass.
: java.lang.ClassNotFoundException: org.graphframes.GraphFramePythonAPI
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
at py4j.Gateway.invoke(Gateway.java:282)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
at py4j.GatewayConnection.run(GatewayConnection.java:238)
at java.lang.Thread.run(Thread.java:748)
有解决此问题的想法吗?
要将 GraphFrames 与 Spark 一起使用,您应该将其安装为 Spark package,而不是 PIP 包:
pyspark --packages graphframes:graphframes:0.7.0-spark2.3-s_2.11
如果您使用 Jupyter 进行开发,请从 pyspark 启动它,而不是直接从 Anaconda 启动它。意思是打开终端然后运行
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS=notebook
pyspark --packages graphframes:graphframes:0.6.0-spark2.3-s_2.11
这将启动 Jupyter,并在后台加载正确的 PySpark 包。如果您随后使用 from graphframes import
将其导入到脚本中,它将正确拾取它并且 运行
我想将 GraphFrames 与 PySpark 一起使用(目前在 Google Dataproc 上使用 Spark v2.3.3)。
使用
安装 GraphFrames 后pip install graphframes
我尝试运行下面的代码:
from graphframes import *
localVertices = [(1,"A"), (2,"B"), (3, "C")]
localEdges = [(1,2,"love"), (2,1,"hate"), (2,3,"follow")]
v = sqlContext.createDataFrame(localVertices, ["id", "name"])
e = sqlContext.createDataFrame(localEdges, ["src", "dst", "action"])
g = GraphFrame(v, e)
但是我得到这个错误:
Py4JJavaError: An error occurred while calling o301.loadClass.
: java.lang.ClassNotFoundException: org.graphframes.GraphFramePythonAPI
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
at py4j.Gateway.invoke(Gateway.java:282)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
at py4j.GatewayConnection.run(GatewayConnection.java:238)
at java.lang.Thread.run(Thread.java:748)
有解决此问题的想法吗?
要将 GraphFrames 与 Spark 一起使用,您应该将其安装为 Spark package,而不是 PIP 包:
pyspark --packages graphframes:graphframes:0.7.0-spark2.3-s_2.11
如果您使用 Jupyter 进行开发,请从 pyspark 启动它,而不是直接从 Anaconda 启动它。意思是打开终端然后运行
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS=notebook
pyspark --packages graphframes:graphframes:0.6.0-spark2.3-s_2.11
这将启动 Jupyter,并在后台加载正确的 PySpark 包。如果您随后使用 from graphframes import
将其导入到脚本中,它将正确拾取它并且 运行