apache-spark - 如何将数据帧传递给 spark udf?
问题描述
我想定义一个udf。在函数体中,它将从外部数据框中搜索数据。我怎样才能做到这一点?我试图将数据框传递给 udf。但它不能工作。
示例代码:
val countryDF = spark.read
.option("inferSchema", "true")
.option("header", "true")
.csv("Country.csv")
val geo = (originString: String, dataFrame: DataFrame) => {
// Search data from countryDF
val row = dataFrame.where(col("CountryName") === originString)
if (row != Nil){
// set data to row index 2
row.getAs[String](2)
}
else{
"0"
}
}
val udfGeo = udf(geo)
val cLatitudeAndLongitude = udfGeo(countryTestDF.col("CountryName"), lit(countryDF))
countryTestDF = countryTestDF.withColumn("Latitude", cLatitudeAndLongitude)
解决方案
如果要使用 UDF,则必须在列上工作,而不是在数据框对象上工作。您必须创建一个新列来获取 UDF 的输出。
def geo(originString : String, CountryName: String) : Int = {
if (CountryName == originString){
return 1}
else{
return 0}
}
val geoUDF = udf(geo _)
val newData = countryDF.withColum("isOrignOrNot", geoUDF(col("originString"),col("CountryName"))
推荐阅读
- c# - 不同 SignalR 集线器之间的通信?
- c# - 如何将 Polly 策略添加到使用工厂创建的改装客户端?
- git - 无法使用 ssh 推送到 git
- python - 为什么我在这个 API 调用中得到 TypeError 字符串索引必须是整数?(播种 Django DB)
- android - 在 android Studio 中发现 java.lang.reflect.InvocationTargetException(无错误消息)
- python - 如何实现Player结果映射?
- r - 如何计算 R 中单元格内由逗号分隔的唯一 2 个单词短语?
- python - f.write(buf) TypeError: 需要一个类似字节的对象,而不是 'str'
- excel - 有没有办法指定 GetOpenFilename 使用的目录?
- python - Leetcode 中的二和问题的算法没有输出