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文档。