Загружает ли Spark всю таблицу в память, если условие выбора основано на преобразовании СДР? - PullRequest
0 голосов
/ 14 февраля 2020
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()

В этом случае искра загружает всю таблицу b в память, а затем отфильтровывает строки xtring или фактически создает эту строку xstring, а затем загружает подмножество таблицы b в память, когда мы вызываем show

1 Ответ

3 голосов
/ 15 февраля 2020

Когда mem sql запрашивается с использованием option("query", "select * from ......."), весь результат (не таблица) будет считан из mem sql в исполнители. Mem SQL Spark Connector 2.0 поддерживает опускание столбцов и фильтров, для которых SQL должен иметь условие фильтра и соединения, а не применять фильтр и соединение в кадре данных. В вашем примере будет использоваться предикат pu sh down. В вашем примере - вся таблица «a» будет прочитана, потому что нет условия фильтра, xstring будет построен, тогда будет прочитана только та часть таблицы «b», которая соответствует условию x in (...).

Здесь mem sql документация , объясняющая это .

...