假设您需要从下表中为特定的 Id 选择 name,并将该值存储在变量中。
+-----+-------+
| id | name |
+-----+-------+
| 100 | Alex |
| 200 | Bidan |
| 300 | Cary |
+-----+-------+
SCALA
------------
先过滤掉不相关的数据,然后选择name列,最后存入name变量中
var name = df.filter($"id" === "100").select("name").collect().map(_.getString(0)).mkString("")
PYTHON (PYSPARK)
--------------
为了更简单的使用,我创建了一个函数,它通过将数据框和所需的列名传递给它来返回值(这是 spark 数据框,而不是 Pandas 数据框)。在将数据框传递给该函数之前,filter 被用于过滤掉其他记录。
def GetValueFromDataframe(_df,columnName):
for row in _df.rdd.collect():
return row[columnName].strip()
name = GetValueFromDataframe(df.filter(df.id == "100"),"name")
使用3x 版本的 Python 可能有比这更简单的方法。我上面展示的代码已经针对2.7 版本进行了测试。
注意:
由于我们使用collect函数,所以最有可能遇到内存不足错误(驱动程序内存)。因此,始终建议在调用 collect 函数之前应用转换(如 filter、where 等)。如果你
仍然遇到驱动程序内存不足的问题,您可以将--conf spark.driver.maxResultSize=0 作为命令行参数来使用无限的驱动程序内存。