是否可以从(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()
答案 0 :(得分:2)
只能在jdbc中使用仅包含一列的SQL查询,而不是“ table”参数,请在此处找到一些详细信息: