Spark Dataframe 是不是对 DB 应用转换?
Posted
技术标签:
【中文标题】Spark Dataframe 是不是对 DB 应用转换?【英文标题】:Does Spark Dataframe aplies the transformations against DB?Spark Dataframe 是否对 DB 应用转换? 【发布时间】:2017-06-06 10:52:01 【问题描述】:当我使用 PySpark 获得一张桌子时
df1 = session.read.jdbc(url=self.url,
table=self.table,
properties="driver": self.driver,
"user": self.user,
"password": self.password)
或
df1 = sql.read.format("com.databricks.spark.redshift")
.options(url=self.url,
query=self.table,
user=self.user,
password=self.password,
tempdir="s3://path/data/").load()
然后我应用了一些转换,比如 joins 和 groupBy
df3 = df1.join(df2, df1.id == df2.id)
df_res = df3.groupBy("id").agg('tax': 'sum')
这是针对数据库的吗? 如果是的话,在内存中这样做的方法是什么?
【问题讨论】:
【参考方案1】:事实并非如此。虽然 Spark 可以下推简单的投影和选择(细节取决于特定的数据源实现),但它不会对数据库应用繁重的处理,除非在受支持的数据源中明确指示。
例如,jdbc
传递 subquery 作为 table
参数,com.databricks.spark.redshift
可以使用 query
选项。
在第一个 sn-p (jdbc
) 中,Spark 将使用 a single executor 读取所有需要的数据(在应用可能的投影和选择之后),在第二个 sn-p 中读取初始 query
的结果(加上投影和选择)到 S3 并从那里并行读取。在这两种情况下,Spark 都应该能够下推投影(id, tax)
。
之后,Spark 会在集群内部本地处理数据,这包括 join
和聚合。
【讨论】:
以上是关于Spark Dataframe 是不是对 DB 应用转换?的主要内容,如果未能解决你的问题,请参考以下文章
[Spark][Python][DataFrame][SQL]Spark对DataFrame直接执行SQL处理的例子
值 createGlobalTempView 不是 apache.org.spark.sql.DataFrame 的成员