当前位置: 首页 > 知识库问答 >
问题:

如何访问dataframe列中的数组元素(scala) [duplicate]

赫连瑾瑜
2023-03-14

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|
+-----------------------------------+

你能告诉我是否有可能编辑命令results.address_components.short_name来访问数组元素吗?

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)

共有3个答案

贺飞星
2023-03-14

非常感谢你的帮助。两种方法都奏效了!

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()

此外,我找到了一种使用UDF解决问题的方法:

val headValue = udf((arr: Seq[String]) => arr.head)
var dfElements3 = dfElements2.withColumn("CP",headValue(dfElements2("short_name")))
                             .select("CP","lat","lng")
洪俊拔
2023-03-14

您可以在列上使用应用方法,或者获取项目

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

df.select(col("results.address_components.short_name").getItem(0))
曾弘扬
2023-03-14

试试这个:

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

第n项的选择实际上是SQL表达式,而不是列。因此,如果您想使用,也可以使用expr。选择

df.select(expr("short_name[0]"), expr("lat"), expr("lng"))
 类似资料:
  • 我有一个问题: 我有一个列表Java,我填充了不同的值。例如,我有: 我也有其他价值观。现在,我想在这个列表中只搜索第一个字段。例如,我想要A的indexOf。我尝试过写这段代码: 但我得到-1作为回报。我想知道在加载数组时如何访问列表中的字段。

  • 问题内容: 我是python的新手,我想了解如何处理数组的元素。例如,如果我有: 我已经在python中定义了它们,例如: 我看到我无法参考,但是给了我一个结果。所以,我不明白如何访问这些数组的第二行?那会是吗?为了将它们乘以等,我将如何做? 问题答案: 如果你有 然后 将正常工作。就像您想要的那样,它指向第二列,第二行。 我不确定您做错了什么。 要乘以第三列中的单元格,您可以执行以下操作 它将适

  • 我有一个简单的内部类变量,如何在scala中访问它?

  • 问题内容: 我正在将数组传递给我的Django模板。我要访问的阵列中的阵列的各个元素(例如)等等,而不是通过整个阵列循环。 有没有办法在Django模板中做到这一点? 问题答案: 请记住,Django模板中的点符号用于Python中的四种不同符号。在模板中,可以表示以下任何一项: 它按此顺序尝试它们,直到找到匹配项。因此,你将获得列表索引,因为你的对象不是以3为键的dict,没有名为3的属性,也没

  • 本文向大家介绍MongoDB中如何访问JSON数组的内部元素,包括了MongoDB中如何访问JSON数组的内部元素的使用技巧和注意事项,需要的朋友参考一下 要在MongoDB中访问JSON数组的内部元素,请使用点表示法。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是访问JSON数组内部元素的查询- 这将产生以下输出-

  • 通过触发这个Webhook,我收到一个订单对象,当我在电子邮件中输出它时,它如下所示: 数组{“id”:1154,“parent_id”:0,“status”:“pending”,“currency”:“eur”,“version”:“3.2.3”,“prices_include_tax”:true,“date_created”:{“date”:“2017-12-15 15:58:42.00000