簡體   English   中英

PySpark:“/usr/libexec/java_home/bin/java:不是目錄”(macOS Big Sur)

[英]PySpark: "/usr/libexec/java_home/bin/java: Not a directory" (macOS Big Sur)

我正在嘗試運行 hello-world PySpark 應用程序。

我正在使用 PyCharm

我的LOL.py腳本代碼:

  import os
    
    os.environ["SPARK_HOME"] = "/opt/spark"
    
    from pyspark.sql import SparkSession
    
    def init_spark():
      spark = SparkSession.builder.appName("HelloWorld").getOrCreate()
      sc = spark.sparkContext
      return spark,sc
    
    def main():
      spark,sc = init_spark()
      nums = sc.parallelize([1,2,3,4])
      print(nums.map(lambda x: x*x).collect())
    
    
    if __name__ == '__main__':
      main()

輸出:

/opt/spark/bin/spark-class: line 71: /usr/libexec/java_home/bin/java: Not a directory
    
    Traceback (most recent call last):
      File "/Users/evgenii/PycharmProjects/bi-etl-orders/LOL.py", line 19, in <module>
        main()
      File "/Users/evgenii/PycharmProjects/bi-etl-orders/LOL.py", line 13, in main
        spark,sc = init_spark()
      File "/Users/evgenii/PycharmProjects/bi-etl-orders/LOL.py", line 8, in init_spark
        spark = SparkSession.builder.appName("HelloWorld").getOrCreate()
      File "/Users/evgenii/.pyenv/versions/3.7.5/lib/python3.7/site-packages/pyspark/sql/session.py", line 173, in getOrCreate
        sc = SparkContext.getOrCreate(sparkConf)
      File "/Users/evgenii/.pyenv/versions/3.7.5/lib/python3.7/site-packages/pyspark/context.py", line 349, in getOrCreate
        SparkContext(conf=conf or SparkConf())
      File "/Users/evgenii/.pyenv/versions/3.7.5/lib/python3.7/site-packages/pyspark/context.py", line 115, in __init__
        SparkContext._ensure_initialized(self, gateway=gateway, conf=conf)
      File "/Users/evgenii/.pyenv/versions/3.7.5/lib/python3.7/site-packages/pyspark/context.py", line 298, in _ensure_initialized
        SparkContext._gateway = gateway or launch_gateway(conf)
      File "/Users/evgenii/.pyenv/versions/3.7.5/lib/python3.7/site-packages/pyspark/java_gateway.py", line 94, in launch_gateway
        raise Exception("Java gateway process exited before sending its port number")
    
    Exception: Java gateway process exited before sending its port number

我知道“ Java 網關進程在發送其端口號之前退出”通常是由於 JAVA_HOME 設置不正確而引發的。

但我認為事實並非如此,因為我的 JAVA_HOME 看起來很正常:

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

這是我的 SPARK_HOME:

$ echo $SPARK_HOME
/opt/spark

我的環境:

  • Python 3.7.5 (如果重要,我使用 pyenv)
  • Java 采用openjdk-8.jdk (通過Homebrew 安裝。如果重要的話,我也將adaptopenjdk-11.jdk 存儲在同一文件夾中)
  • PySpark 2.4.0
  • MacOS BigSur 11.5.2
  • PyCharm 專業版 2021.1.3

我閱讀了幾個相關的指南,但目前都沒有幫助。 我將不勝感激任何幫助。 先感謝您!

Spark 2.4.0 將需要 Java 8,你的系統上有它,但看起來 PyCharm 沒有使用這個版本,即使可用。 我在 Eclipse 上遇到了類似的問題,它默認為 Java 的最后一個版本,這產生了兼容性問題,我懷疑在您的應用程序中。

你是從 PyCharm 運行你的應用程序嗎? 如果是這樣,您可以從那里顯示環境值嗎?

你是如何安裝 Spark 的? 您提到了 Java 的 brew,您是否也將 brew 用於 Spark? 如果沒有,也許值得一試,因為依賴關系真的很棘手。

在 shell 中運行java -version會發生什么? 您可以嘗試卸載 Java 11 並重新安裝 Java 8 嗎?

我希望這幾條建議能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM