我想要一个Python模块,我只是在运行模块中的函数时才导入依赖模块。这是因为依赖模块非常复杂(即它设置运行的服务器程序等)并且仅在我的模块将在其上使用的一些系统上可用。我想像这样使用我的模块:
import mymodule
mymodule.simple_function() # just a simple function to be used on any system
mymodule.import_complex_dependencies()
mymodule.function_that_uses_functionality_of_the_complex_dependency_module()
假设我不打算将我的模块拆分成两个并且我不打算创建一个子模块,那么会有什么办法呢?
答案 0 :(得分:4)
如果只有某个特定功能需要该模块,只有该特定功能导入模块:
def func_with_dependencies():
import dependency
...
答案 1 :(得分:0)
您可以这样做:
from pyspark.sql import functions as f
rdd = spark.sparkContext.parallelize([(['A'], [0]), (['B', 'C'], [1]), (['D', 'E', 'F'], [0, 2])])
df = spark.createDataFrame(rdd, ['myarray', 'myindices'])
my_UDF = f.UserDefinedFunction(lambda x, y: map(lambda z: x[z], y), returnType=ArrayType(StringType()))
res = df.withColumn('result', my_UDF(df['myarray'], df['myindices']))
res.show(truncate=False)
output:
+---------+---------+------+
|myarray |myindices|result|
+---------+---------+------+
|[A] |[0] |[A] |
|[B, C] |[1] |[C] |
|[D, E, F]|[0, 2] |[D, F]|
+---------+---------+------+
这样复杂的东西只能加载一次。