我创建了一个包含3列的数据框:zip,lat,lng
我想选择zip = 00650的经纬度值
因此,我尝试使用:
sqlContext.sql("select lat,lng from census where zip=00650").show()
但是它返回ArrayOutOfBound异常,因为它没有任何值。如果我删除where子句,它将运行良好。
有人可以解释我在做什么错吗?
数据框架构:
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|
正如你可以在你的方案看zip是类型的String,所以你的查询应该是这样的
zip
String
sqlContext.sql("select lat, lng from census where zip = '00650'").show()
如果您正在使用,Spark 2则可以执行以下操作:
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| +-------+-------+