Pyspark: You cannot use dbutils within a spark job
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-05-2022 12:19 AM
I am trying to parallelise the execution of file copy in Databricks. Making use of multiple executors is one way. So, this is the piece of code that I wrote in pyspark.
def parallel_copy_execution(src_path: str, target_path: str):
files_in_path = dbutils.fs.ls(src_path)
file_paths_df = spark.sparkContext.parallelize(files_in_path).toDF()
file_paths_df.foreach(lambda x: dbutils.fs.cp(x.path.toString(), target_path, recurse=True))I fetched all the files to copy and created a Dataframe. And when trying to run a foreach on top of the DataFrame I am getting the following error. It says that
`You cannot use dbutils within a spark job`
You cannot use dbutils within a spark job or otherwise pickle it.
If you need to use getArguments within a spark job, you have to get the argument before
using it in the job. For example, if you have the following code:
myRdd.map(lambda i: dbutils.args.getArgument("X") + str(i))
Then you should use it this way:
argX = dbutils.args.getArgument("X")
myRdd.map(lambda i: argX + str(i))But when I try the same in Scala. It works perfectly. The dbutils is used inside a spark job then. Attaching that piece of code as well.
def parallel_copy_execution(p: String, t: String): Unit = {
dbutils.fs.ls(p).map(_.path).toDF.foreach { file =>
dbutils.fs.cp(file(0).toString,t , recurse=true)
println(s"cp file: $file")
}
}Is the Pyspark API's not updated to handle this?
If yes, please suggest an alternative to process parallel the dbutils command.
Labels:
- Labels:
-
Parallel processing
-
Pyspark
-
Python
-
Spark job