where子句在spark sql数据框中不起作用 [英] where clause not working in spark sql dataframe

查看:49
本文介绍了where子句在spark sql数据框中不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个包含 3 列的数据框:zip、lat、lng

I've created a dataframe which contains 3 columns : zip, lat, lng

我想选择 zip = 00650 的 lat 和 lng 值

I want to select the lat and lng values where zip = 00650

所以,我尝试使用:

sqlContext.sql("select lat,lng from census where zip=00650").show()

但它返回 ArrayOutOfBound Exception 因为它没有任何值.如果我删除 where 子句,它运行良好.

But it is returning ArrayOutOfBound Exception because it does not have any values in it. If I remove the where clause it is running fine.

有人可以解释一下我做错了什么吗?

Can someone please explain what I am doing wrong ?

数据帧架构:

root 
|-- zip: string (nullable = true) 
|-- lat: string (nullable = true) 
|-- lng: string (nullable = true)

前 10 行是:

+-----+---------+-----------+
|  zip|      lat|        lng|
+-----+---------+-----------+
|00601|18.180555| -66.749961|
|00602|18.361945| -67.175597|
|00603|18.455183| -67.119887|
|00606|18.158345| -66.932911|
|00610|18.295366| -67.125135|
|00612|18.402253| -66.711397|
|00616|18.420412| -66.671979|
|00617|18.445147| -66.559696|
|00622|17.991245| -67.153993|
|00623|18.083361| -67.153897|
|00624|18.064919| -66.716683|
|00627|18.412600| -66.863926|
|00631|18.190607| -66.832041|
|00637|18.076713| -66.947389|
|00638|18.295913| -66.515588|
|00641|18.263085| -66.712985|
|00646|18.433150| -66.285875| 
|00647|17.963613| -66.947127|
|00650|18.349416| -66.578079|

推荐答案

正如你在你的架构中看到的 zipString 类型,所以你的查询应该是一些东西像这样

As you can see in your schema zip is of type String, so your query should be something like this

sqlContext.sql("select lat, lng from census where zip = '00650'").show()

更新:

如果您使用的是 Spark 2,那么您可以这样做:

import sparkSession.sqlContext.implicits._

val dataFrame = Seq(("10.023", "75.0125", "00650"),("12.0246", "76.4586", "00650"), ("10.023", "75.0125", "00651")).toDF("lat","lng", "zip")

dataFrame.printSchema()

dataFrame.select("*").where(dataFrame("zip") === "00650").show()

dataFrame.registerTempTable("census")

sparkSession.sqlContext.sql("SELECT lat, lng FROM census WHERE zip = '00650'").show()

输出:

root
 |-- lat: string (nullable = true)
 |-- lng: string (nullable = true)
 |-- zip: string (nullable = true)

+-------+-------+-----+
|    lat|    lng|  zip|
+-------+-------+-----+
| 10.023|75.0125|00650|
|12.0246|76.4586|00650|
+-------+-------+-----+

+-------+-------+
|    lat|    lng|
+-------+-------+
| 10.023|75.0125|
|12.0246|76.4586|
+-------+-------+

这篇关于where子句在spark sql数据框中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆