Python Spark数据帧方法“toPandas”实际上在做什么?
我是Spark DataFrame API的初学者 我使用此代码加载分隔为Spark数据帧的csv选项卡Python Spark数据帧方法“toPandas”实际上在做什么?,python,pandas,apache-spark,pyspark,Python,Pandas,Apache Spark,Pyspark,我是Spark DataFrame API的初学者 我使用此代码加载分隔为Spark数据帧的csv选项卡 lines = sc.textFile('tail5.csv') parts = lines.map(lambda l : l.strip().split('\t')) fnames = *some name list* schemaData = StructType([StructField(fname, StringType(), True) for fname in fnames])
lines = sc.textFile('tail5.csv')
parts = lines.map(lambda l : l.strip().split('\t'))
fnames = *some name list*
schemaData = StructType([StructField(fname, StringType(), True) for fname in fnames])
ddf = sqlContext.createDataFrame(parts,schemaData)
假设我使用Spark从新文件创建DataFrame,并使用内置方法toPandas()将其转换为pandas
- 它是否将Pandas对象存储到本地内存
- 熊猫的低级计算全部由Spark处理吗
- 它是否公开了所有数据帧功能?(我想是的)
- 我可以把它转换成andas并直接使用它,而不需要太多的数据帧API吗李>
sc.textFile
方法将为您提供一个spark RDD,它实际上是一个文本行列表。这可能不是你想要的。不会执行任何类型推断,因此如果您想对CSV文件中的一列数字求和,您将无法执行,因为就Spark而言,它们仍然是字符串
只需使用pandas.read_csv并将整个csv读入内存。熊猫将自动推断每列的类型。Spark不会这么做的
现在回答您的问题:
它是否将熊猫对象存储到本地内存中:
对toPandas()
会将Spark数据帧转换为Pandas数据帧,当然这是内存中的数据帧
熊猫的低级计算是否全部由Spark处理
不,Pandas运行自己的计算,spark和Pandas之间没有相互作用,只是一些API兼容性
它是否公开了所有数据帧功能?
否。例如,系列
对象具有一种在PySpark列
对象中不可用的插值
方法。pandas API中有许多方法和函数不在PySpark API中
我可以将其转换为Andas并直接使用它,而不需要太多的数据帧API吗?
当然。事实上,在这种情况下,你甚至不应该使用Sparkpandas.read_csv
可能会处理您的用例,除非您正在处理大量数据
尝试使用简单、低技术、易于理解的库来解决您的问题,并且只在需要时使用更复杂的库。很多时候,您不需要更复杂的技术。使用一些spark上下文或hive上下文方法(
sc.textFile()
,hc.sql()
)将数据“读入内存”会返回RDD,但RDD保留在分布式内存中(工作节点上的内存),而不是主节点上的内存。所有RDD方法(RDD.map()
,RDD.reduceByKey()
等)都设计为在工作节点上并行运行,但有一些例外。例如,如果运行rdd.collect()
方法,则最终会将rdd的内容从所有工作节点复制到主节点内存中。因此,您将失去分布式计算的好处(但仍然可以运行rdd方法)
与pandas类似,当您运行
toPandas()
时,您会将数据帧从分布式(工作)内存复制到本地(主)内存,并失去大部分分布式计算功能。因此,一种可能的工作流程(我经常使用)可能是使用分布式计算方法将数据预先转换为合理大小,然后转换为丰富功能集的数据帧。希望能有所帮助。谢谢您回答我的问题。事实上,也许我还不够清楚。我是spark的初学者。我只是在这里测试从csv加载。我需要读取太大而无法在内存中处理的数据并进行数据分析。因此,这里的目标是在Hadoop中进行一些数据分析。所以,当我从Hadoop(hive)加载数据时,转换成pandas会将其加载到本地内存中?而且我不会在单机上使用Hadoop。我可能必须从hdfs用配置单元加载数据。如果我把它转换成熊猫,我能在分布式系统中做熊猫吗?啊。我懂了。Spark数据帧和Pandas数据帧不共享计算基础设施。Spark数据帧在有意义的地方模拟熊猫数据帧的API。如果你想在Hadoop生态系统上寻找一种类似熊猫的操作方式,另外还可以使用熊猫数据帧进入内存,那么请查看。除了blaze,sparklingpandas还旨在为pandas提供Spark数据帧上类似的API:我可以先读取带有pandas数据帧的csv,然后将其转换为Spark数据帧吗?