尝试创建spark-scala类以使用日历引用表。
我在Hadoop数据库上使用sql来创建Spark数据帧:
scala> val dfCyccal = sql(sqlCyccal)
dfCyccal: org.apache.spark.sql.DataFrame = [DT_WORKDAY: date, NWKD: int ... 4 more fields]
scala> dfCyccal.printSchema
root
|-- DT_WORKDAY: date (nullable = true)
|-- NWKD: integer (nullable = true)
|-- DT_PREV_WD: date (nullable = true)
|-- DT_NEXT_WD: date (nullable = true)
|-- DT_MNTHEND: date (nullable = true)
|-- ACCTG_MNTH: date (nullable = true)
scala> dfCyccal.show(5)
+----------+----+----------+----------+----------+----------+
|DT_WORKDAY|NWKD|DT_PREV_WD|DT_NEXT_WD|DT_MNTHEND|ACCTG_MNTH|
+----------+----+----------+----------+----------+----------+
|2004-01-29| 20|2003-12-30|2004-02-27|2004-01-29|2004-01-01|
|2004-01-30| 1|2003-12-31|2004-03-02|2004-02-27|2004-02-01|
|2004-02-02| 2|2004-01-02|2004-03-03|2004-02-27|2004-02-01|
|2004-02-03| 3|2004-01-05|2004-03-04|2004-02-27|2004-02-01|
|2004-02-04| 4|2004-01-06|2004-03-05|2004-02-27|2004-02-01|
+----------+----+----------+----------+----------+----------+
only showing top 5 rows
然后我为提取物设置了参考常量:
scala> val MIN_DT_WORKDAY : java.sql.Date = dfCyccal.agg(min('DT_WORKDAY)).first().getDate(0)
MIN_DT_WORKDAY: java.sql.Date = 2004-01-29
scala> val MAX_DT_WORKDAY : java.sql.Date = dfCyccal.agg(max('DT_WORKDAY)).first().getDate(0)
MAX_DT_WORKDAY: java.sql.Date = 2020-12-01
问题是,当我尝试将其封装在类定义中时,我得到了不同的结果:
class CYCCAL(parameters for SQL) {
...
val dfCyccal = sql(sqlCyccal).persist;
<console>:143: error: not found: value min
val MIN_DT_WORKDAY : java.sql.Date = dfCyccal.agg(min('DT_WORKDAY)).first().getDate(0)
^
<console>:144: error: not found: value max
val MAX_DT_WORKDAY : java.sql.Date = dfCyccal.agg(max('DT_WORKDAY)).first().getDate(0)
}; // end of CYCCAL
类设置如何更改DataFrame上的操作?
答案 0 :(得分:1)
他们的工作方式相同。 spark-shell
默认情况下只导入许多对象,包括:
import org.apache.spark.sql.functions._
您自己的代码中缺少。
答案 1 :(得分:0)
这很有用。我不得不在类定义中添加以下内容:
import org.apache.spark.sql.functions.{min,max};
我还必须从
更改列上的表示法val MIN_DT_WORKDAY : java.sql.Date = dfCyccal.agg(min('DT_WORKDAY)).first().getDate(0)
到
val MIN_DT_WORKDAY : java.sql.Date = dfCyccal.agg(min("DT_WORKDAY")).first().getDate(0)
原件正在作为符号处理,您无法将功能应用于它。