Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas Apache Spark-sqlContext.sql到_Pandas_Apache Spark_Pyspark_Pyspark Sql - Fatal编程技术网

Pandas Apache Spark-sqlContext.sql到

Pandas Apache Spark-sqlContext.sql到,pandas,apache-spark,pyspark,pyspark-sql,Pandas,Apache Spark,Pyspark,Pyspark Sql,Hy, 我有一个Spark数据框架,并使用SQL上下文进行了一些转换,例如,在所有数据中只选择两列 df_oraAS = sqlContext.sql("SELECT ENT_EMAIL,MES_ART_ID FROM df_oraAS LIMIT 5 ") 但是现在我想把这个sqlcontext转换成一个熊猫数据帧,我正在使用 pddf = df_oraAS.toPandas() 但是输出在这里停止,我需要重新启动IDE(spyder) 接下来,我创建了一个sparkContext来操作数

Hy, 我有一个Spark数据框架,并使用SQL上下文进行了一些转换,例如,在所有数据中只选择两列

df_oraAS = sqlContext.sql("SELECT ENT_EMAIL,MES_ART_ID FROM df_oraAS LIMIT 5 ")
但是现在我想把这个sqlcontext转换成一个熊猫数据帧,我正在使用

pddf = df_oraAS.toPandas()
但是输出在这里停止,我需要重新启动IDE(spyder)

接下来,我创建了一个sparkContext来操作数据帧

sqlContext = SQLContext(sc)

df_oraAS = sqlContext.createDataFrame(df_ora)

df_oraAS.registerTempTable("df_oraAS")

df_oraAS = sqlContext.sql("SELECT ENT_EMAIL,MES_ART_ID FROM df_oraAS LIMIT 5 ")
 pddf = df_oraAS.toPandas() 
我想再次将sqlcontext转换为数据帧

sqlContext = SQLContext(sc)

df_oraAS = sqlContext.createDataFrame(df_ora)

df_oraAS.registerTempTable("df_oraAS")

df_oraAS = sqlContext.sql("SELECT ENT_EMAIL,MES_ART_ID FROM df_oraAS LIMIT 5 ")
 pddf = df_oraAS.toPandas() 

toPandas
基本上是。输出是本地数据帧。如果数据不适合驱动程序内存,它将简单地失败,因此您会看到错误

toPandas
基本上是。输出是本地数据帧。如果数据不适合驱动程序内存,它将简单地失败,因此您会看到错误

您的pd.read\u sql调用将整个数据库读取到一个数据帧中。这是本地的司机。当您调用createDataFrame时,它会从您的python数据帧创建一个Spark数据帧,这将导致非常大的任务大小(请参见下面的日志行):

尽管只选择了5行,但实际上您首先使用pd.read\u sql调用将完整的数据库加载到内存中。如果您正在读取Oracle SQL数据库,为什么不使用spark JDBC驱动程序,然后执行select筛选器,然后调用toPandas


您的代码所做的是将整个数据库读入pandas,写入Spark,过滤并读回pandas。

您的pd.read\u sql调用将整个数据库读入pandas数据帧。这是本地的司机。当您调用createDataFrame时,它会从您的python数据帧创建一个Spark数据帧,这将导致非常大的任务大小(请参见下面的日志行):

尽管只选择了5行,但实际上您首先使用pd.read\u sql调用将完整的数据库加载到内存中。如果您正在读取Oracle SQL数据库,为什么不使用spark JDBC驱动程序,然后执行select筛选器,然后调用toPandas


您的代码所做的是将整个数据库读入pandas,向Spark写入,过滤并读回pandas。

您能回答这个问题吗?这将更容易找到。不幸的是@Kardu如zero323所说,如果你没有足够的空间,你将在收集原始表是否有2列或1列时出现此错误…@eliasah谢谢你的评论,但我有一台具有80Gb RAM内存的机器,我只使用14Gb…@eliasah也许spark无法使用所有的机器内存?我怎么知道?你能再检查一下数据中的记录数吗?以及问题中的正确代码。最后一行应该不同,不是吗?你能回答这个问题吗?这将更容易找到。不幸的是@Kardu如zero323所说,如果你没有足够的空间,你将在收集原始表是否有2列或1列时出现此错误…@eliasah谢谢你的评论,但我有一台具有80Gb RAM内存的机器,我只使用14Gb…@eliasah也许spark无法使用所有的机器内存?我怎么知道?你能再检查一下数据中的记录数吗?以及问题中的正确代码。最后一行应该不同,不是吗?
16/01/22 16:04:02 WARN TaskSetManager: Stage 0 contains a task of very large size (116722 KB). The maximum recommended task size is 100 KB.