使用与 Hive 兼容的 SPARK SQL。
如果 col1 是一个字符串,这可能是一个解决方案:
val initDF = spark.sql("select '{color=blue, name=john, size=M}' as col1 union select '{color=red, name=jim, size=L}' as col1")
initDF.show(false)
它显示:
+-------------------------------+
|col1 |
+-------------------------------+
|{color=blue, name=john, size=M}|
|{color=red, name=jim, size=L} |
+-------------------------------+
如果您只想获取 color=blue 的行
initDF.where("col1 like '%color=blue%'").show(false)
这显示了预期的结果:
+-------------------------------+
|col1 |
+-------------------------------+
|{color=blue, name=john, size=M}|
+-------------------------------+
如果 col1 是一个结构体:
val initDFStruct = spark.sql("select 'blue' as color, 'john' as name, 'M' as size union select 'red' as color, 'jim' as name, 'L'")
.selectExpr("(color, name, size) as col1")
initDFStruct.show(false)
它显示:
+---------------+
|col1 |
+---------------+
|[red, jim, L] |
|[blue, john, M]|
+---------------+
initDFStruct.where("col1.color = 'blue'").show(false)
显示想要的结果:
+---------------+
|col1 |
+---------------+
|[blue, john, M]|
+---------------+
总之,如果你有它作为一个字符串列,你可以在你的 where 子句中使用
where col1 like '%color=blue%'
而如果你把它作为一个结构,你的 where 子句应该是:
"col1.color = 'blue'