我正在尝试使用spark.read来获取UDF中的文件计数,但是当我执行该程序时,该点将挂起。
我正在用数据帧列调用UDF。 udf必须读取文件并返回计数。但这是行不通的。我正在将变量值传递给UDF函数。当我删除spark.read代码并简单地返回一个数字时,它起作用。但是spark.read无法通过UDF工作
def prepareRowCountfromParquet(jobmaster_pa: String)(implicit spark: SparkSession): Int = {
print("The variable value is " + jobmaster_pa)
print("the count is " + spark.read.format("csv").option("header", "true").load(jobmaster_pa).count().toInt)
spark.read.format("csv").option("header", "true").load(jobmaster_pa).count().toInt
}
val SRCROWCNT = udf(prepareRowCountfromParquet _)
df
.withColumn("SRC_COUNT", SRCROWCNT(lit(keyPrefix)))
SRC_COUNT列应获取文件行
答案 0 :(得分:2)
UDF不能使用spark上下文,因为它仅存在于驱动程序中并且不能序列化。
通常来说,您需要读取所有的csv,使用groupBy计算计数,然后可以向df进行左连接