scala 在从SQL Server阅读数据时根据先前的数据框值过滤数据

disho6za  于 2023-10-18  发布在  Scala
关注(0)|答案(1)|浏览(108)

我在Azure SQL服务器上有两个巨大的表,我试图将它们放入我的笔记本。第一个表是按日期过滤的,但要过滤第二个表,我需要找到第二个表的主键的最小值,并导入它。基本上,这就是我正在尝试的:

val date = "make_date(2023,06,01)"

val TableA= spark.read.synapsesql("sqlserver.dbo.table1")
.select("columnA"
,"columnB"
,"DateColumn")
.toDF()
.filter(expr("DateColumn>="+date))
.repartition(20)
.createOrReplaceTempView("TableA")

val min = spark.sql("""select min(columnA) as mincolA from TableA""".stripMargin)


val TableB = spark.read.synapsesql("sqlserver.dbo.tableB")
.select("columnA"
,"columnC")
.filter(expr("columnA >="+min))

这是给我以下错误时,试图过滤:

org.apache.spark.sql.catalyst.parser.ParseException:
===SQL===

columnA >= [min: bigint]

我该怎么解决这个问题?任何帮助是非常感谢!如果可以避免的话,我不想拉进十亿条记录

3wabscal

3wabscal1#

在提供的代码中,val min的类型是Dataframe(不是日期)。对于get date,可以使用getAs[Date]

val min = spark.sql("""select min(columnA) as mincolA from TableA""".stripMargin)
.first().getAs[Date]("mincolA")

相关问题