Spark从PostgreSQL表中读取单列

时间:2018-09-04 19:57:21

标签: apache-spark pyspark apache-spark-sql pyspark-sql

问题

是否可以从(PostreSQL)数据库表中将特定列作为Spark DataFrame加载?

以下是我尝试过的内容。

预期的行为:

下面的代码应该只将指定的列存储在内存中,而不是整个表(对于我的集群而言,表太大)。

float

实际行为:

发生内存不足异常。我想这是因为Spark尝试加载整个表然后选择一个列,而不是仅加载选定的列?还是实际上只加载该列,但该列太大?我只将该列限制为10个值,不是这种情况吗?

# 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()

1 个答案:

答案 0 :(得分:2)

只能在jdbc中使用仅包含一列的SQL查询,而不是“ table”参数,请在此处找到一些详细信息:

spark, scala & jdbc - how to limit number of records