Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何访问dataframe列(scala)中的数组元素_Arrays_Scala_Apache Spark_Dataframe - Fatal编程技术网

Arrays 如何访问dataframe列(scala)中的数组元素

Arrays 如何访问dataframe列(scala)中的数组元素,arrays,scala,apache-spark,dataframe,Arrays,Scala,Apache Spark,Dataframe,dfElements2中的第一列是一个数组。我需要选择第一个元素(30002 | 30005 | 30158…,而不是数组,而不是完整数组,同时选择纬度和经度: 数据框应如下所示: +-----------------------------------+ | short_name | lat | lng +-----------------------------------+ | 30002 |37.9796566|-1.1317041| | 30005

dfElements2
中的第一列是一个
数组
。我需要选择第一个元素
(30002 | 30005 | 30158…
,而不是数组,而不是完整数组,同时选择纬度和经度:

数据框应如下所示:

+-----------------------------------+
| short_name  |   lat    |   lng
+-----------------------------------+
|   30002     |37.9796566|-1.1317041|
|   30005     |37.9868856|-1.1371011|
|   30158     | 37.941845|-1.0681918|
|   30006     |37.9971704|-1.0993366|
+-----------------------------------+
您能告诉我是否可以编辑命令
结果。地址\u组件。短\u名称
来访问数组元素吗

var DFResults2=DF_Google1.select(explode(DF_Google1 ("results"))).toDF("results")
var dfElements2=DFResults2.select("results.address_components.short_name","results.geometry.location.lat","results.geometry.location.lng")**
var dfElements3=dfElements2.select(explode(dfElements2("short_name"))).toDF("CP")

dfElements2.show()
dfElements2.printSchema()


+--------------------+----------+----------+
|          short_name|       lat|       lng|
+--------------------+----------+----------+
|[30002, Murcia, M...|37.9796566|-1.1317041|
|[30005, Murcia, M...|37.9868856|-1.1371011|
|[30158, Murcia, M...| 37.941845|-1.0681918|
|[30006, Murcia, M...|37.9971704|-1.0993366|
|[30100, Murcia, M...|38.0256612|-1.1640968|
|[30009, Murcia, M...|37.9887492|-1.1496969|
|[30008, Murcia, M...|37.9928939|-1.1317041|
|[30007, Murcia, M...|38.0077579|-1.0993366|
|[Murcia, MU, Regi...|37.9922399|-1.1306544|
|[30004, Murcia, M...|37.9822582|-1.1365014|
|[30003, Murcia, M...|37.9850434|-1.1221111|
|[Murcia, MU, Regi...|37.9922399|-1.1306544|
|[30152, Murcia, M...|37.9569734|-1.1496969|
|[30012, Murcia, M...|37.9651726|-1.1233101|
|[30011, Murcia, M...|37.9759009|-1.1089244|
|[30001, Murcia, M...|37.9856424|-1.1287061|
|[30010, Murcia, M...| 37.970285|-1.1424989|
+--------------------+----------+----------+

root
 |-- short_name: array (nullable = true)
 |    |-- element: string (containsNull = true)
 |-- lat: double (nullable = true)
 |-- lng: double (nullable = true)
试试这个:

df.selectExpr("short_name[0]", "lat", "lng")
第n项的选择实际上是一个SQL表达式,而不是一列。因此,如果要使用
,也可以使用
expr
。选择

df.select(expr("short_name[0]"), expr("lat"), expr("lng"))

您可以在列上使用
apply
方法,或者
getItem

df.select(col("results.address_components.short_name")(0))


非常感谢你的帮助。双管齐下

A2.select(col("results.address_components.short_name")(0),col("results.geometry.location.lat"),col("results.geometry.location.lng"))

A2.selectExpr("results.address_components.short_name[0]", "results.geometry.location.lat", "results.geometry.location.lng").show()
此外,我还找到了使用自定义项解决问题的方法:

val headValue = udf((arr: Seq[String]) => arr.head)
var dfElements3 = dfElements2.withColumn("CP",headValue(dfElements2("short_name")))
                             .select("CP","lat","lng")

明亮的成功了,也成功了!谢谢!
val headValue = udf((arr: Seq[String]) => arr.head)
var dfElements3 = dfElements2.withColumn("CP",headValue(dfElements2("short_name")))
                             .select("CP","lat","lng")