leftDF.select(ltColName).foreach { ltRow =>
Приведенная выше строка переносит ваш код в блок foreach как задание для исполнителя. Теперь с riteDF.select(rtColName).foreach { rtRow =>
вы пытаетесь получить доступ к сеансу Spark в исполнителе, что запрещено. Сеанс Spark доступен только на стороне драйвера. В методе ofRow
он пытается получить доступ к sparkSession
,
val qe = sparkSession.sessionState.executePlan(logicalPlan)
Вы не можете использовать коллекции наборов данных так же, как обычные коллекции Java / Scala, вы должны использовать их по apis, доступным для выполнения задач, например, вы можете присоединиться к ним, чтобы сопоставить дату.
В этом случае вы можете выполнить сравнение несколькими способами. Вы можете присоединиться к 2 наборам данных, например,
var joinedDf = leftDF.select(ltColName).join(riteDF.select(rtColName), $"ltColName" === $"rtColName", "inner")
Затем проанализируйте joinedDf
. Вы можете даже intersect()
два набора данных.