Spark Scala中year/month函数报错not found的原因排查请求
解决Spark Scala中month/year函数找不到的问题
嗨,我来帮你快速定位并解决这个错误~
你遇到的这两个报错:
notebook:28: error: not found: value month
retail_df = retail_df.withColumn("Month", month(retail_df("Date")))
notebook:29: error: not found: value year
retail_df = retail_df.withColumn("Year", year(retail_df("Date")))
根本原因非常明确:你没有导入Spark SQL提供的日期处理函数包。month()和year()这类日期提取函数都封装在org.apache.spark.sql.functions包里,Spark不会自动导入这个包的内容,所以代码里识别不到这些函数。
具体解决方案
只需要在代码开头补充导入语句即可,有两种方式可选:
- 方式一(推荐):一次性导入所有Spark SQL函数,日常开发更省心
import org.apache.spark.sql.functions._ - 方式二:单独导入需要的两个函数,更轻量化
import org.apache.spark.sql.functions.month import org.apache.spark.sql.functions.year
修正后的完整代码示例
// 导入Schema相关包 import org.apache.spark.sql.types._ // 导入日期函数包(关键!) import org.apache.spark.sql.functions._ // 自定义Schema部分 var schema = StructType(Array( StructField("Store", IntegerType, true), StructField("DayOfWeek", IntegerType, true), StructField("Date", DateType, true), // 这里补充你未写完的字段定义 )) // 现在可以正常使用month和year函数了 retail_df = retail_df.withColumn("Month", month(retail_df("Date"))) retail_df = retail_df.withColumn("Year", year(retail_df("Date")))
小提示
你还可以用更简洁的列引用方式,比如month($"Date")或者month(col("Date")),写法更清爽,但前提同样是要导入functions包哦~
内容的提问来源于stack exchange,提问作者Oblivion
相关产品推荐
相关产品推荐

