spark read 在 Scala UDF 函数中不起作用
Posted
技术标签:
【中文标题】spark read 在 Scala UDF 函数中不起作用【英文标题】:spark read doesn't work inside Scala UDF function 【发布时间】:2019-04-14 16:51:50 【问题描述】:我正在尝试使用 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 列应该获取文件的行
【问题讨论】:
您不能在 UDF 中创建或使用DataFrame
,此外,spark
对象仅存在于执行程序的 驱动程序 中它将是null
。例如,看看这个:***.com/questions/48893002/…
【参考方案1】:
UDF 不能使用 spark 上下文,因为它只存在于驱动程序中并且不可序列化。
一般来说,您需要阅读所有 csv,使用 groupBy 计算计数,然后您可以对 df 进行左连接
【讨论】:
谢谢阿农。我没有调用 udf,而是将 spark 读入列中。有效。感谢您让我知道这个概念以上是关于spark read 在 Scala UDF 函数中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在 Spark-Scala 和 Cataloging UDF 中注册一个函数以及其他函数?
如何使用scala将特定函数转换为apache spark中的udf函数? [复制]
遇到问题--spark-scala---Cannot resolve overloaded method ‘udf‘--Defines a Scala closure of 11 arguments