当前位置: 首页 > 知识库问答 >
问题:

如何在pyspark中将DataFrame转换回正常的RDD?

翟宏放
2023-03-14

我需要使用

(rdd.)partitionBy(npartitions, custom_partitioner)

DataFrame上不可用的方法。所有DataFrame方法都只引用DataFrame结果。那么,如何从数据帧数据中创建RDD呢?

注意:这是对 1.2.0 的更改(在 1.3.0 中)。

更新来自@dpangmao的回答:方法是. rdd。我很想知道(a)它是否是公共的,以及(b)它对性能有何影响。

好吧(a)是和(b)-好吧,您可以在这里看到有显着的perf含义:必须通过调用map分区来创建一个新的RDD:

在数据帧中。py(注意文件名也更改了(是sql.py):

@property
def rdd(self):
    """
    Return the content of the :class:`DataFrame` as an :class:`RDD`
    of :class:`Row` s.
    """
    if not hasattr(self, '_lazy_rdd'):
        jrdd = self._jdf.javaToPython()
        rdd = RDD(jrdd, self.sql_ctx._sc, BatchedSerializer(PickleSerializer()))
        schema = self.schema

        def applySchema(it):
            cls = _create_cls(schema)
            return itertools.imap(cls, it)

        self._lazy_rdd = rdd.mapPartitions(applySchema)

    return self._lazy_rdd

共有3个答案

张嘉
2023-03-14

Kennyut/Kistian 给出的答案效果很好,但是当 RDD 由属性列表组成时,为了获得精确的 RDD 输出,例如 [1,2,3,4],我们可以使用如下所示的 flatmap 命令,

rdd = df.rdd.flatMap(list)

rdd = df.rdd.flatMap(lambda x: list(x))
齐典
2023-03-14

@dapangmao的回答是可行的,但是它没有给出常规的火花RDD,它返回一个Row对象。如果你想要常规的RDD格式。

试试这个:

rdd = df.rdd.map(tuple)

rdd = df.rdd.map(list)
堵雅健
2023-03-14

使用方法< code >。rdd如下:

rdd = df.rdd
 类似资料:
  • 我一直在尝试将RDD转换为数据帧,然后再转换回来。首先,我有一个类型为(Int,Int)的RDD,称为dataPair。然后,我创建了一个带有列标题的DataFrame对象,使用: 然后我使用以下方法将其从DataFrame转换回RDD: 它返回RDD类型org.apache.spark.sql.Row(not(Int, Int))。然后我想使用. toDF将其转换回RDD,但我得到一个错误: 我

  • 有人能分享一下如何将转换为吗?

  • 如何将RDD()转换为Dataframe。我使用将dataframe转换为rdd。处理完后,我想把它放回DataFrame中。我怎么能这么做?

  • 问题内容: 我可以很容易地在Scala中将DataFrame转换为Dataset: 但是在Java版本中,我不知道如何将Dataframe转换为Dataset?任何想法? 我的努力是: 但是编译器会说: 编辑(解决方案): 基于@ Leet-Falcon的解决方案答案: 问题答案: Spark官方文档在Dataset API中 建议以下内容: 通过在 Encoders 上调用静态方法来指定Java

  • 我试图在我的数据集上运行PySpark中的FPGrowth算法。 我得到以下错误: 我的数据帧df格式如下: 如果“名称”列中的数据形式为: 如何在这个形式中从StringType转换为ArrayType 我从我的RDD形成了Dataframe:

  • 我正在尝试使用以下代码将数据帧“df2”保存到文本文件中 代码:df2。写格式(“文本”)。模式(“覆盖”)。保存(“/tmp/hive/save\u text”) 错误: Py4JJavaError Traceback(最近一次调用) /databricks/spark/python/pyspark/sql/utils.py在deco(*a,**kw)62 try:--- /databricks