Spark DataFrame方法“ toPandas”实际上在做什么?

发布于 2021-01-29 18:30:55

我是Spark-DataFrame API的初学者。

我使用此代码将制表符分隔的csv加载到Spark Dataframe中

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对象存储到本地内存?
  • 熊猫的低级计算是否全部由Spark处理?
  • 它是否公开了所有熊猫数据框功能?(我想是的)
  • 我可以将它转换为熊猫并完成它,而无需动动DataFrame API吗?
关注者
0
被浏览
176
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用spark将CSV文件读取到中pandas是实现将CSV文件读取到内存的最终目标的一种round回方法。

    似乎您可能误解了此处使用的技术的用例。

    Spark用于分布式计算(尽管可以在本地使用)。通常,它太重了,无法用于简单地读取CSV文件。

    在您的示例中,该sc.textFile方法将简单地为您提供火花RDD,该火花RDD实际上是文本行列表。这可能不是您想要的。不会执行类型推断,因此,如果您想对CSV文件中的一列数字求和,则将无法执行,因为就Spark而言,它们仍然是字符串。

    只需使用pandas.read_csv并将整个CSV读取到内存中即可。熊猫会自动推断每列的类型。Spark不会这样做。

    现在回答您的问题:

    它是否将Pandas对象存储到本地内存

    是。toPandas()会将Spark DataFrame转换成Pandas DataFrame,它当然在内存中。

    熊猫的低级计算是否全部由Spark处理

    否。熊猫运行自己的计算,spark和pandas之间没有相互作用,仅存在 一些 API兼容性。

    它是否公开了所有熊猫数据框功能?

    否。例如,Series对象具有interpolatePySparkColumn对象中不可用的方法。Pandas
    API中有很多方法和函数,而PySpark API中没有。

    我可以将它转换为Pandas并完成它,而无需过多接触DataFrame API吗?

    绝对。实际上,在这种情况下,您甚至根本不应该使用Spark。pandas.read_csv除非你是一个工作很可能会处理你的使用情况 庞大 的数据量。

    尝试使用简单,技术含量低,易于理解的库来解决您的问题,并且 在需要 时才 去处理更复杂的问题。很多时候,您将不需要更复杂的技术。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看