apache-spark-sql - pyspark 在数据框中传递多个选项
问题描述
我是 python 和 pyspark 的新手。我想知道如何在 pyspark 中编写以下 spark 数据框函数:
val df = spark.read.format("jdbc").options(
Map(
"url" -> "jdbc:someDB",
"user" -> "root",
"password" -> "password",
"dbtable" -> "tableName",
"driver" -> "someDriver")).load()
我试图在 pyspark 中写如下。但是,出现语法错误:
df = spark.read.format("jdbc").options(
map(lambda : ("url","jdbc:someDB"), ("user","root"), ("password","password"), ("dbtable","tableName"), ("driver","someDriver"))).load()
提前致谢
解决方案
在 PySpark 中,将选项作为关键字参数传递:
df = spark.read\
.format("jdbc")\
.options(
url="jdbc:someDB",
user="root",
password="password",
dbtable="tableName",
driver="someDriver",
)\
.load()
dict
有时将它们保存在 a 中并稍后使用 splat 运算符将它们解包很方便:
options = {
"url": "jdbc:someDB",
"user": "root",
"password": "password",
"dbtable": "tableName",
"driver": "someDriver",
}
df = spark.read\
.format("jdbc")\
.options(**options)\
.load()
关于您问题中的代码片段:您碰巧混淆了“地图”的两个不同概念:
Map
在 Scala 中是一种数据结构,也称为“关联数组”或“字典”,相当于 Python 的dict
map
在 Python 中是一个高阶函数,可用于将函数应用于可迭代对象,例如:
In [1]: def square(x: int) -> int:
...: return x**2
...:
In [2]: list(map(square, [1, 2, 3, 4, 5]))
Out[2]: [1, 4, 9, 16, 25]
In [3]: # or just use a lambda
In [4]: list(map(lambda x: x**2, [1, 2, 3, 4, 5]))
Out[4]: [1, 4, 9, 16, 25]
推荐阅读
- syntax - Flutter 的小部件构造函数中这种类似 JSON 的语法是什么?
- php - 注意:未定义变量:while ($query->fetch_object()) {} 中的数据
- laravel - 在 Laravel 5.8 中,如何设置模型和包模型之间的多态关系?
- docker - 如何在 docker 中启动停止的 ubuntu 容器?(不带选项运行 (-i - t) )
- javascript - 使用 vanilla js 使用箭头键遍历嵌套 uls 时跳过 ul 的第一个 li
- c++ - Cassandra 驱动程序使用多个键查询
- amazon-web-services - 您能否通过创建 AWS Lambda 来触发 AWS Lambda?
- python - 如何将 CSV 文件读取为带有键的元组字典?
- javascript - 缺少正则表达式以捕获最后一个键值列表条目
- c# - C# ErrorProvides - 允许失去焦点