Spark читает один столбец из таблицы PostgreSQL - PullRequest
0 голосов
/ 04 сентября 2018

Вопрос

Есть ли способ загрузить определенный столбец из таблицы базы данных (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

1 Ответ

0 голосов
/ 04 сентября 2018

SQL-запрос только с одним столбцом может использоваться в jdbc вместо параметра "table", подробности можно найти здесь:

spark, scala & jdbc - как ограничить количество записей

...