Spark读取在Scala UDF功能内不起作用

时间:2019-04-14 16:51:51

标签: scala apache-spark

我正在尝试使用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列应获取文件行

1 个答案:

答案 0 :(得分:2)

UDF不能使用spark上下文,因为它仅存在于驱动程序中并且不能序列化。

通常来说,您需要读取所有的csv,使用groupBy计算计数,然后可以向df进行左连接