有一个包含 2 列(db 和 tb)的数据框:db 代表数据库,tb 代表该数据库的 tableName。
+--------------------+--------------------+
| database| tableName|
+--------------------+--------------------+
|aaaaaaaaaaaaaaaaa...| tttttttttttttttt|
|bbbbbbbbbbbbbbbbb...| rrrrrrrrrrrrrrrr|
|aaaaaaaaaaaaaaaaa...| ssssssssssssssssss|
我在python中有以下方法:
def _get_tb_db(db, tb):
df = spark.sql("select * from {}.{}".format(db, tb))
return df.dtypes
这个udf:
test = udf(lambda db, tb: _get_tb_db(db, tb), StringType())
运行时:
df = df.withColumn("dtype", test(col("db"), col("tb")))
有以下错误:
pickle.PicklingError: Could not serialize object: Py4JError: An
error occurred while calling o58.__getnewargs__. Trace:
py4j.Py4JException: Method __getnewargs__([]) does not exist
我发现了一些关于 stackoverflow 的讨论:Spark __getnewargs__ 错误 ,但我不确定如何解决这个问题?错误是因为我在 UDF 中创建了另一个数据框吗?
类似于链接中的解决方案,我尝试了这个:
cols = copy.deepcopy(df.columns)
df = df.withColumn("dtype", scanning(cols[0], cols[1]))
但仍然出现错误
有什么解决办法吗?
萧十郎
相关分类