我目前正在为dbfs编写一个MLFlow工件,但是我使用的是下面的代码.
temp = tempfile.NamedTemporaryFile(prefix="*****", suffix=".csv")
temp_name = temp.name
try:
df.to_csv(temp_name, index=False)
mlflow.log_artifact(temp_name, "******")
finally:
temp.close() # Delete the temp file如果'df‘是一个火花数据,我将如何写这个?
发布于 2022-02-24 01:42:11
您只需使用带有适当协议的filepath URL即可。"dbfs“是一个通用数据库。对于Azure来说,“For”是必要的。(我不记得AWS的S3扩展了)
filepath="dbfs:///filepath"
df # My Spark DataFrame
df.write.csv(filepath)
mlflow.log_artifact(temp_name, filepath)发布于 2022-07-08 04:23:07
在您的示例中,问题与spark如何访问文件系统有关,而与python如何访问文件系统详情见这里有关。这可能不是推荐的方法(我本人对Databricks相当陌生),但是如果您在一个节点上,您可以将您的拼图写入本地文件系统,mlflow可以使用以下内容记录:
with tempfile.TemporaryDirectory() as tmpdirname:
df.write.parquet(f'file:{tmpdirname}/my_parquet_table')
mlflow.log_artifacts(tmpdirname, artifact_path='my_parquet_table_name')请记住,parquet " file“实际上是一个包含大量文件的目录,因此您需要使用log_artifacts,而不是log_artifact,如果您不指定artifact_path,那么就会得到构成这个拼花文件(目录)的所有小文件,直接转储到您的mlflow工件的根目录中。而且,Mlflow没有任何预视功能,所以根据您的用例,记录parquet工件可能不像最初看起来那么方便。
HTH
https://stackoverflow.com/questions/64771247
复制相似问题