如果选择条件基于 RDD 转换,Spark 是否会在内存中加载整个表?


DataSet<Row> a = spark.read().format("com.memsql.spark.connector").option("query", "select * from a");
a = a.filter((row)-> row.x = row.y)
Sring xstring = "...select all values of x from a and make comma separated string"
DataSet<Row> b = spark.read().format("com.memsql.spark.connector").option("query", "select * from b where x in " + xstring);
b.show()

在这种情况下,因为 spark 会在内存中加载整个 b 表,然后过滤掉 xtring 行,或者它实际上创建了该 xstring,然后在我们调用 show 时在内存中加载表 b 的子集

当使用option("query", "select * from .......")查询 memsql 时,整个结果(不是表(将从 memsql 读取到执行器中。MemSQL Spark 连接器 2.0 支持列和筛选器下推,SQL 需要为其具有筛选器和联接条件,而不是在数据帧上应用筛选器和联接。在您的示例中,将使用谓词下推。在您的示例中 - 将读取整个表 'a',因为没有过滤条件,将构建 xstring,然后只读取表 'b' 中与条件匹配x in (...)部分。

这是解释这一点的memsql文档。

最新更新