当前位置:  开发笔记 > 编程语言 > 正文

是否可以在Pyspark中继承DataFrame?

如何解决《是否可以在Pyspark中继承DataFrame?》经验,为你挑选了1个好方法。

对于Pyspark文档显示被构造DataFrames sqlContext,sqlContext.read()和各种的其他方法.

(参见https://spark.apache.org/docs/1.6.2/api/python/pyspark.sql.html)

是否有可能将Dataframe子类化并独立实例化它?我想为基本DataFrame类添加方法和功能.



1> user6910411..:

这真的取决于你的目标.

从技术上讲,这是可能的.pyspark.sql.DataFrame只是一个简单的Python类.如果需要,您可以扩展它或猴子补丁.

from pyspark.sql import DataFrame

class DataFrameWithZipWithIndex(DataFrame):
     def __init__(self, df):
         super(self.__class__, self).__init__(df._jdf, df.sql_ctx)

     def zipWithIndex(self):
         return (self.rdd
             .zipWithIndex()
             .map(lambda row: (row[1], ) + row[0])
             .toDF(["_idx"] + self.columns))

用法示例:

df = sc.parallelize([("a", 1)]).toDF(["foo", "bar"])

with_zipwithindex = DataFrameWithZipWithIndex(df)

isinstance(with_zipwithindex, DataFrame)
True
with_zipwithindex.zipWithIndex().show()
+----+---+---+
|_idx|foo|bar|
+----+---+---+
|   0|  a|  1|
+----+---+---+

实际上,你在这里做不了多少.DataFrame是一个围绕JVM对象的瘦包装器,除了提供文档字符串,将参数转换为本机所需的表单,调用JVM方法以及在必要时使用Python适配器包装结果之外,没有多大帮助.

使用普通的Python代码,您甚至无法靠近DataFrame/ Dataset内部或修改其核心行为.如果你正在寻找独立的,Python只有Spark DataFrame实现,那是不可能的.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有