나는 두 dataframes 내가 가입하고 나중에 선택하고
val d1 = spark.range(3).withColumn("columnName", lit("d1"))
scala> d1.printSchema
root
|-- id: long (nullable = false)
|-- columnName: string (nullable = false)
val d2 = spark.range(3).withColumn("columnName", lit("d2"))
scala> d2.printSchema
root
|-- id: long (nullable = false)
|-- columnName: string (nullable = false)
있습니다. 데이터 프레임 중 하나의 특정 열을 선택하고 싶습니다. 그러나 다른 열에는 동일한 열 이름이 있습니다.
val q1 = d1.as("d1")
.join(d2.as("d2"), Seq("id"), "left")
.select("d1.columnName")
scala> q1.show
+----------+
|columnName|
+----------+
| d1|
| d1|
| d1|
+----------+
당신은 그냥 작동 볼 수 있듯이.
그래서 왜 효과가 없었습니까? 각각을 분석해 보겠습니다.
// you started very well
d1.as("d1")
// but here you used $ to reference a column to join on
// with column references by their aliases
// that won't work
.join(d2.as("d2"), $"d1.id" === $"d2.id", "left")
// same here
// $ + aliased columns won't work
.select($"d1.columnName")
PROTIP : 사용 d1("columnName")
는 dataframe의 특정 열을 참조합니다.
다른 쿼리
잘 될 뻔했으나 ...
d1.join(d2, d1("id") === d2("id"), "left") // <-- so far so good!
.select($"d1.columnName") // <-- that's the issue, i.e. $ + aliased column
당신이 _ 말했을 때 "그러나 그것은 작동하지 않습니다."_ 에러/예외가 무엇입니까? –