我正在尝试通过 Visual Studio Code 在 EC2 Linux 计算机上的 Jupyter Notebook 中运行 Spark 会话。我的代码如下所示:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("spark_app").getOrCreate()
Run Code Online (Sandbox Code Playgroud)
错误是:
{
"name": "Py4JError",
"message": "An error occurred while calling None.org.apache.spark.sql.SparkSession. Trace:\npy4j.Py4JException: Constructor org.apache.spark.sql.SparkSession([class org.apache.spark.SparkContext, class java.util.HashMap]) does not exist\n\tat py4j.reflection.ReflectionEngine.getConstructor(ReflectionEngine.java:179)\n\tat py4j.reflection.ReflectionEngine.getConstructor(ReflectionEngine.java:196)\n\tat py4j.Gateway.invoke(Gateway.java:237)\n\tat py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:80)\n\tat py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:69)\n\tat py4j.GatewayConnection.run(GatewayConnection.java:238)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n\n",
"stack": "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mPy4JError\u001b[0m Traceback (most recent call last)\n\u001b[1;32mc:\\Users\\IrinaKaerkkaenen\\Projekte\\ZugPortal\\test.ipynb Cell 3'\u001b[0m in \u001b[0;36m<cell line: 2>\u001b[0;34m()\u001b[0m\n\u001b[1;32m <a href='vscode-notebook-cell:/c%3A/Users/IrinaKaerkkaenen/Projekte/ZugPortal/test.ipynb#ch0000002?line=0'>1</a>\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpyspark\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39msql\u001b[39;00m \u001b[39mimport\u001b[39;00m SparkSession\n\u001b[0;32m----> <a href='vscode-notebook-cell:/c%3A/Users/IrinaKaerkkaenen/Projekte/ZugPortal/test.ipynb#ch0000002?line=1'>2</a>\u001b[0m spark \u001b[39m=\u001b[39m SparkSession\u001b[39m.\u001b[39;49mbuilder\u001b[39m.\u001b[39;49mappName(\u001b[39m\"\u001b[39;49m\u001b[39mspark_app\u001b[39;49m\u001b[39m\"\u001b[39;49m)\u001b[39m.\u001b[39;49mgetOrCreate()\n\nFile \u001b[0;32m~/anaconda3/lib/python3.9/site-packages/pyspark/sql/session.py:272\u001b[0m, in \u001b[0;36mSparkSession.Builder.getOrCreate\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 269\u001b[0m sc \u001b[39m=\u001b[39m SparkContext\u001b[39m.\u001b[39mgetOrCreate(sparkConf)\n\u001b[1;32m 270\u001b[0m \u001b[39m# …Run Code Online (Sandbox Code Playgroud) python apache-spark apache-spark-sql pyspark jupyter-notebook
我想在带有 tensorflow 后端的 keras 张量上执行类似于 np.where 的操作。这意味着可以说我有两个张量:diff 和 sum。我将这些向量划分为:
rel_dev = diff / sum
Run Code Online (Sandbox Code Playgroud)
对于 np.arrays 我会写:
rel_dev = np.where((diff == 0.0) & (sum == 0.0), 0.0, rel_dev)
Run Code Online (Sandbox Code Playgroud)
rel_dev = np.where((diff != 0.0) & (sum == 0.0), np.sign(diff), rel_dev)
Run Code Online (Sandbox Code Playgroud)
也就是说,例如,如果我在 diff 和 sum 中都有零,我希望我不会得到 np.Inf,而是将 rel_dev 设置为零。现在在带有张量的 keras 中它不起作用。我尝试过 K.switch、K.set_value 等。据我所知,它适用于整个张量,但不适用于单独的部分,对吗?虽然它没有设置这些条件就可以工作,但我不知道实际发生了什么。我还没有成功调试它。
你能告诉我如何在 Keras 中为 rel_dev 写两个条件吗?