基于不同类型spark 1.6列的Spark join dataframe
Posted
技术标签:
【中文标题】基于不同类型spark 1.6列的Spark join dataframe【英文标题】:Spark join dataframe based on column of different type spark 1.6 【发布时间】:2020-06-18 16:44:20 【问题描述】:我有 2 个数据框 df1 和 df2 。我将根据列col1
和col2
同时加入 df1 和 df2。然而,col1 的数据类型是 string
in df1
,col2 的类型是 int
in df2
。当我尝试像下面这样加入时,
val df3 = df1.join(df2,df1("col1") === df2("col2"),inner).select(df2("col2"))
连接不起作用并返回空数据类型。在df2
中不改变col2
的类型是否可以获得正确的输出
【问题讨论】:
看起来你有一个有效的答案 @VB_ :表示这是一个有效的场景吗? 我的意思是@_mvasyliv 提供了一个可行的解决方案恕我直言 【参考方案1】: val dDF1 = List("1", "2", "3").toDF("col1")
val dDF2 = List(1, 2).toDF("col2")
val res1DF = dDF1.join(dDF2, dDF1.col("col1") === dDF2.col("col2").cast("string"), "inner")
.select(dDF2.col("col2"))
res1DF.printSchema()
res1DF.show(false)
// root
// |-- col2: integer (nullable = false)
//
// +----+
// |col2|
// +----+
// |1 |
// |2 |
// +----+
获取架构数据帧
val sch1 = dDF1.schema
sch1: org.apache.spark.sql.types.StructType = StructType(StructField(col1,StringType,true))
// public StructField(String name,
// DataType dataType,
// boolean nullable,
// Metadata metadata)
【讨论】:
如果有多个连接列,我如何更改类型? @techie 您可以从dDF1
动态选择架构并动态转换列以上是关于基于不同类型spark 1.6列的Spark join dataframe的主要内容,如果未能解决你的问题,请参考以下文章
Spark 2.0 将 json 读入带有引号的数据帧中 - 与 spark 1.6 不同的行为......错误?
在 spark 1.6 中计数(不同)不能与 hivecontext 查询一起使用