当前位置: 首页 > 面试题库 >

在Python中从Spark DataFrame创建labeledPoints

东方志尚
2023-03-14
问题内容

.map()我如何使用python中的哪个函数labeledPoints从spark数据帧创建一组?如果标签/结果不是第一列,但我可以引用其列名“状态”,该怎么办?

我使用此.map()函数创建Python数据框:

def parsePoint(line):
    listmp = list(line.split('\t'))
    dataframe = pd.DataFrame(pd.get_dummies(listmp[1:]).sum()).transpose()
    dataframe.insert(0, 'status', dataframe['accepted'])
    if 'NULL' in dataframe.columns:
        dataframe = dataframe.drop('NULL', axis=1)  
    if '' in dataframe.columns:
        dataframe = dataframe.drop('', axis=1)  
    if 'rejected' in dataframe.columns:
        dataframe = dataframe.drop('rejected', axis=1)  
    if 'accepted' in dataframe.columns:
        dataframe = dataframe.drop('accepted', axis=1)  
    return dataframe

在reduce函数重新组合了所有Pandas数据帧之后,我将其转换为Spark数据帧。

parsedData=sqlContext.createDataFrame(parsedData)

但是现在如何labledPoints在Python中从中创建呢?我认为这可能是另一个.map()功能?


问题答案:

如果您已经具有数字功能并且不需要其他转换,则可以使用VectorAssembler合并包含自变量的列:

from pyspark.ml.feature import VectorAssembler

assembler = VectorAssembler(
    inputCols=["your", "independent", "variables"],
    outputCol="features")

transformed = assembler.transform(parsedData)

接下来,您可以简单地映射:

from pyspark.mllib.regression import LabeledPoint
from pyspark.sql.functions import col

(transformed.select(col("outcome_column").alias("label"), col("features"))
  .rdd
  .map(lambda row: LabeledPoint(row.label, row.features)))

从Spark
2.0开始mlmllibAPI不再兼容,而后者正朝着弃用和移除的方向发展。如果仍然需要此功能,则必须转换ml.Vectorsmllib.Vectors

from pyspark.mllib import linalg as mllib_linalg
from pyspark.ml import linalg as ml_linalg

def as_old(v):
    if isinstance(v, ml_linalg.SparseVector):
        return mllib_linalg.SparseVector(v.size, v.indices, v.values)
    if isinstance(v, ml_linalg.DenseVector):
        return mllib_linalg.DenseVector(v.values)
    raise ValueError("Unsupported type {0}".format(type(v)))

和地图:

lambda row: LabeledPoint(row.label, as_old(row.features)))


 类似资料:
  • 问题内容: 我正在寻找一种在python中动态创建html文件的方法。我正在编写画廊脚本,该脚本在目录中进行迭代,收集文件元数据。然后,我打算使用此数据基于html自动创建图片库。事情很简单,只是一张图片表。 我真的不认为手动写入文件是最好的方法,并且代码可能很长。那么,有没有更好的方法可以做到这一点,可能是html特定的? 问题答案: 我认为,如果我对您的理解正确,那么您可以在此处看到“使用Py

  • 问题内容: 这个问题不是为了讨论是否需要单例设计模式,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式。在这种情况下,我定义“最pythonic”表示它遵循“最小惊讶原则”。 我有多个将成为单例的类(我的用例用于记录器,但这并不重要)。当我可以简单地继承或修饰时,我不希望增加gumph来使几个类杂乱无章。 最佳方法: 方法1:装饰器 优点

  • 问题内容: 我有大量的数据(几场演出),我需要用Python编写一个zip文件。我无法一次全部将其加载到内存中以传递给ZipFile的.writestr方法,我真的不想使用临时文件将其全部馈入磁盘,然后再读回。 有没有办法将生成器或类似文件的对象提供给ZipFile库?还是由于某种原因似乎不支持此功能? 压缩文件是指压缩文件。如Python zipfile包中所支持。 问题答案: 唯一的解决方案是

  • 问题内容: 我有一个看起来像这样的csv: 我想制作一个以类别为键的字典,并以剩余数据作为值的字典列表。所以它看起来像这样: (此处缩进以提高可读性)。 我像下面的代码片段一样尝试了一下,但是到那儿我什么也没得到: 问题答案: 使用:

  • 问题内容: 我试图在这里一次正常地问一个问题,但是没人知道我想问什么。因此,我在PHP中找到了示例。 PYTHON中有没有像extract()这样的函数? 因此,字典也是如此: ps为什么我要这样做:当您处于类方法中时,当string为self.data [‘raw’] [‘code’]时,很难对join()和format()中的字符串进行6种操作(假设这是这里的字典) 问题答案: 好的php兄弟

  • 问题内容: 我有一个日志文件,其中使用python记录了一些测试命令及其状态(通过/失败)。现在,我希望测试命令不应写为简单文本,而应写为超链接。这样,当我单击它们时,将打开另一个链接到它们的文件。 例如: 现在,我希望写在logfile.log中的CommandName应该是文件TestCommand.log的超链接,以便当我单击CommandName时,文件TestCommand.log会打开