Вопрос
Есть ли способ загрузить определенный столбец из таблицы базы данных (PostreSQL) в виде Spark DataFrame?
Ниже я попробовал ниже.
Ожидаемое поведение:
Приведенный ниже код должен приводить к только указанному столбцу, хранящемуся в памяти, а не всей таблице (таблица слишком велика для моего кластера).
# make connection in order to get column names
conn = p2.connect(database=database, user=user, password=password, host=host, port="5432")
cursor = conn.cursor()
cursor.execute("SELECT column_name FROM information_schema.columns WHERE table_name = '%s'" % table)
for header in cursor:
header = header[0]
df = spark.read.jdbc('jdbc:postgresql://%s:5432/%s' % (host, database), table=table, properties=properties).select(str(header)).limit(10)
# doing stuff with Dataframe containing this column's contents here before continuing to next column and loading that into memory
df.show()
Фактическое поведение:
Исключение из-за недостатка памяти. Я предполагаю, что это потому, что Spark пытается загрузить всю таблицу , а затем выбрать столбец, а не просто загрузить выбранный столбец? Или это действительно загрузка только столбца, но этот столбец слишком большой; Я ограничил столбец только 10 значениями, так что не должно быть дела?
2018-09-04 19:42:11 ERROR Utils:91 - uncaught error in thread spark-listener-group-appStatus, stopping SparkContext
java.lang.OutOfMemoryError: GC overhead limit exceeded