G G*_*G G 14 scala dataframe apache-spark apache-spark-sql
我正在尝试将列值提取到变量中,以便我可以在代码中的其他位置使用该值.我想尝试如下
val name= test.filter(test("id").equalTo("200")).select("name").col("name")
Run Code Online (Sandbox Code Playgroud)
它回来了
name org.apache.spark.sql.Column = name
Run Code Online (Sandbox Code Playgroud)
如何获得价值?
Yua*_* JI 19
该col("name")给你一个列的数据类型.如果要从"name"列中提取数据,只需执行相同的操作即可col("name"):
val names = test.filter(test("id").equalTo("200"))
.select("name")
.collectAsList() // returns a List[Row]
Run Code Online (Sandbox Code Playgroud)
然后,对于一行,您可以在String中获取名称:
val name = row.getString(0)
Run Code Online (Sandbox Code Playgroud)
val maxDate = spark.sql("select max(export_time) as export_time from tier1_spend.cost_gcp_raw").first()
val rowValue = maxDate.get(0)
Run Code Online (Sandbox Code Playgroud)
让我们假设您需要name从下表中选择特定Id值并将该值存储在变量中。
+-----+-------+
| id | name |
+-----+-------+
| 100 | Alex |
| 200 | Bidan |
| 300 | Cary |
+-----+-------+
Run Code Online (Sandbox Code Playgroud)
SCALA
-----------
先过滤掉不相关的数据,然后name选择列,最后存入name变量
var name = df.filter($"id" === "100").select("name").collect().map(_.getString(0)).mkString("")
Run Code Online (Sandbox Code Playgroud)
蟒蛇(PYSPARK)
----------------------------
为了更简单地使用,我创建了一个函数,通过将数据帧和所需的列名称传递给它来返回值(这是 Spark Dataframe 而不是 Pandas Dataframe)。在将数据帧传递给此函数之前,filter用于过滤掉其他记录。
def GetValueFromDataframe(_df,columnName):
for row in _df.rdd.collect():
return row[columnName].strip()
name = GetValueFromDataframe(df.filter(df.id == "100"),"name")
Run Code Online (Sandbox Code Playgroud)
可能有比使用3xPython 版本更简单的方法。我上面显示的代码已经过2.7版本测试。
注意:
由于我们使用该功能,很可能会遇到内存不足错误(驱动程序内存)collect。因此,始终建议在调用函数之前应用转换(例如 等filter)。如果您仍然遇到驱动程序内存不足问题,您可以作为命令行参数传递以利用无限的驱动程序内存。wherecollect--conf spark.driver.maxResultSize=0
小智 5
通过此代码片段,您可以将列中的所有值提取到字符串中。使用 where 子句修改代码片段以获得所需的值。
val df = Seq((5, 2), (10, 1)).toDF("A", "B")
val col_val_df = df.select($"A").collect()
val col_val_str = col_val_df.map(x => x.get(0)).mkString(",")
/*
df: org.apache.spark.sql.DataFrame = [A: int, B: int]
col_val_row: Array[org.apache.spark.sql.Row] = Array([5], [10])
col_val_str: String = 5,10
*/
Run Code Online (Sandbox Code Playgroud)
整个列的值存储在 col_val_str 中
col_val_str: String = 5,10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51937 次 |
| 最近记录: |