1. ホーム
  2. python

pysparkでcol関数が見つからない

2023-08-28 15:38:34

質問

pyspark 1.6.2において、インポートできるのは col という関数で

from pyspark.sql.functions import col

で調べようとしても Githubのソースコード で調べてみると col の中に functions.py ファイル内に存在しない関数を python がインポートすることはできますか?

どのように解決するには?

存在します。ただ、明示的に定義されていないだけです。からエクスポートされる関数は pyspark.sql.functions からエクスポートされる関数は、JVMコードの周りの薄いラッパーで、特別な扱いを必要とするいくつかの例外を除いて、ヘルパーメソッドを使用して自動的に生成されます。

ソースを注意深くチェックすると を注意深くチェックすると col が他の _functions . この辞書は をさらに繰り返し であり _create_function はラッパーを生成するために使われます。生成された各関数は、直接 globals .

最後に __all__ は、モジュールからエクスポートされるアイテムのリストを定義していますが、単にすべての globals をすべてエクスポートします。

このメカニズムがまだ明確でない場合は、おもちゃのような例を作成することができます。

  • というPythonモジュールを作成します。 foo.py というPythonモジュールを以下の内容で作成します。

    # Creates a function assigned to the name foo
    globals()["foo"] = lambda x: "foo {0}".format(x)
    
    # Exports all entries from globals which start with foo
    __all__ = [x for x in globals() if x.startswith("foo")]
    
    
  • Pythonのパスのどこか(例えば作業ディレクトリ内)に配置します。

  • インポート foo :

    from foo import foo
    
    foo(1)
    
    

このようなメタプログラミングのアプローチの望ましくない副作用は、定義された関数が純粋に静的コード解析に依存するツールによって認識されない可能性があることです。これは重要な問題ではなく、開発プロセス中に安全に無視することができます。

インストールされている IDE に応じて タイプアノテーション をインストールすることで問題を解決できるかもしれません (たとえば ゼロ323/pyspark-stubs#172 ).