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

与管道PySpark配合时,输出列已存在错误

冯淳
2023-03-14

我试图在PySpark中创建一个管道,以便为随机林准备数据。我使用的是Spark 2.2(2.2.0.2.6.4.0-91)。

我的数据不包含空值。我确定了分类列和数字列。

我正在对分类列进行编码并定义标签(选项['vae])。然后,我使用VectorAssembler为我的特征获取一个向量列。

在管道中,在拟合和转换之后,我应该得到一个带有标签列和特征(向量)列的spark数据帧。

不幸的是,当拟合我得到这个错误与火花:

回溯(最后一次调用):
文件/usr/hdp/current/spark2客户端/python/lib/pyspark.zip/pyspark/sql/utils.py”,第63行,在deco文件/usr/hdp/current/spark2客户端/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py中,第319行,在get\u return\u value中。协议Py4JJavaError:调用o4563时出错。配合:Java语言lang.IllegalArgumentException:要求失败:输出列T\u Q\u DAV\u indexed已存在*

我在其他任何地方都没有发现这种错误。所以我在这里寻求帮助。

这是我的管道代码:

print("One Hot Encoding...")
stringIndexer  = [StringIndexer(inputCol=col, outputCol=col + "_indexed").setHandleInvalid("keep") for col in categoricalColumns]
encoders = [OneHotEncoder(dropLast=True, inputCol=col + '_indexed', outputCol=col+ "_class") for col in categoricalColumns]
label_stringIdx = StringIndexer(inputCol = options['vae'], outputCol = 'label')

print("Vectorizing...")
assembler = VectorAssembler(inputCols=[col+ "_class" for col in categoricalColumns] + numericCols, outputCol="features")

print("Pipeline...")
pipeline = Pipeline(stages = stringIndexer + encoders + [label_stringIdx] + [assembler])
    
print('Fit...')
pipelineModel = pipeline.fit(s_df)
    
print('Transform...')
s_df = pipelineModel.transform(s_df)
    
selectedCols = ['label', 'features'] + cols
s_df = s_df.select(selectedCols)

共有1个答案

宗政楚
2023-03-14

我也有同样的问题。

解决方案是消除列T\u Q\u DAV\u索引

  • 在categoricalColumns中(只有T\U Q\U DAV)或

(我使用了第一个问题的名称)

 类似资料:
  • 我试图使用pipeline.save()方法保存一个OneHotEncoder管道,但是我得到了以下错误- 管道的输出是正确的,我已经验证了这一点。我认为我的数据大小可能是一个问题,但如果我仍然得到这个错误,我将在一个小子集上运行它(~10行x1列)。 环境: python-3.7。spark version 3.1.1 使用Scala version 2.12.10,OpenJDK 64位服务器

  • 问题内容: 本质上,我正在尝试替换: 为了避免使用硬盘驱动器,请在C ++中使用管道。这是我的代码: 我绝对可以确保上述字符串已正确初始化。但是,发生了两件事对我来说没有意义: (1)我正在执行的程序报告“输入文件为空”。由于我未使用“ <”调用程序,因此不应期望输入文件。相反,它应该期待键盘输入。此外,它应该阅读“ gulp_command”中包含的文本。 (2)程序的报告(通过标准输出提供)出

  • 我试图实现一个MergeSort递归算法来对一个数组进行排序,但是我一直在合并部分遇到这个问题,我不明白为什么会出现这个错误: 线程“main”中的异常 java.lang.OutOfMemory错误:Java 堆空间 它在第 21 行标记错误 这是合并部分的代码,递归部分似乎没有问题 有人能帮帮我吗?我已经试着重新检查代码,但似乎没有任何帮助。 编辑:已经尝试扩展内存,仍然抛出这个错误

  • 以下是我在Leetcode上解决“合并两个排序列表”算法问题的代码: 我得到了一个运行时错误。但是我的代码有什么问题?

  • 我正在尝试运行下面的代码,在本地安装的pyspark中创建graphframe。但我犯了个错误。我使用的是spark-2.4.0-bin-hadoop2.7版本。 我得到以下错误。

  • 问题内容: 当传递Python程序的输出的管道时,Python解释器对编码感到困惑,并将其设置为None。这意味着这样的程序: 正常运行时可以正常工作,但失败: 编解码器无法在位置编码字符:序数不在范围内(128) 以管道顺序使用时。 使管道工作的最佳方法是什么?我能告诉它使用外壳程序/文件系统/正在使用的任何编码吗? 到目前为止,我所看到的建议是直接修改你的,或使用此hack硬编码: 有更好的方