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

Pyspark 2.7在值为“”时,将数据帧中的StringType列设置为“null”

魏彦
2023-03-14

我有一个名为good_df的DataFrame,它具有混合类型的列。我正在尝试将StringType的列的任何空值设置为'null'。我认为下面的代码可以工作,但事实并非如此。

self.good_df = self.good_df.select([when((col(c)=='') & (isinstance(self.good_df.schema[c].dataType, StringType)),'null').otherwise(col(c)).alias(c) for c in self.good_df.columns])

我正在查看错误消息,它并没有给我多少线索:

Traceback(最近的最后一次调用):File",第1行,在File"/usr/lib/python2.7/site-pack/pyspark/sql/column.py",第116行,在_njc=getattr(自身_jc,名称)(jc)File"/usr/lib/python2.7/site-pack/py4j/java_gateway.py",第1257行,在调用应答中,self.gateway_client,self.target_id,self.name)File"/usr/lib/python2.7/site-pack/pyspark/sql/utils.py",第63行,在deco中返回f(*a,**kw)File"/usr/lib/python2.7/site-pack/py4j/protocol.py",第332行,get_return_value格式(, ".", 名称,值))Py4JError:调用o792.and.Trace: py4j时出错。Py4JException: method and([类java.lang.Boolean])不存在于py4j.reflection.反射ngine.get方法(反射ngine.java:318)在py4j.reflection.反射ngine.get方法(反射ngine.java:326)在py4j。Gateway.invoke(Gateway.java:274)在py4j.commands.AbstractCommand.invoke方法(AbstractCommand.java:132)在py4j.commands.CallCommand.execute(CallCommand.java:79)在py4j。GatewayConnection.run(GatewayConnection.java:238)在java.lang.Thread.run(Thread.java:748)

有人有什么想法吗?谢谢!

共有1个答案

孟增
2023-03-14

您收到的错误消息:

py4j. py4JException:方法和([类java.lang.布尔])不存在

这意味着您试图在表达式和文字布尔值之间应用AND运算符。

您需要更改此部分:

(isinstance(self.good_df.schema[c].dataType, StringType))

from pyspark.sql.functions import lit

lit(isinstance(self.good_df.schema[c].dataType, StringType))

也就是说,实际上可以将检查列类型的条件直接移动到python列表理解中:

self.good_df = self.good_df.select(*[
    when((col(c) == ''), 'null').otherwise(col(c)).alias(c) if t == "string" else col(c)
    for c, t in self.good_df.dtypes
])
 类似资料:
  • 我有以下代码: 这工作正常,直到我这样做(试图设置列'idx'作为索引的数据帧) 这会引发一个错误 这是什么意思?

  • 我有一个这样的数据框: 输出应如下所示 有没有一种方法可以在没有循环的情况下获得这个结果,一些可移植的代码来获得这个输出?

  • 我有这样的数据框 我想改变每个日期值str如果他们匹配的条件 在()18 x='2016-17'19返回ses6中的TypeError回溯(最近一次调用)--- /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/series.py in apply(self,func,

  • 问题内容: 我希望将值设置为如果我提交的表单中的文本框未放入任何内容。我怎样才能做到这一点?我尝试插入,但这只是将单词添加到字段中。 我不确定应该为此提供什么代码,我只是在编写UPDATE查询。 问题答案: 不要在更新语句中加引号。这应该工作:

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

  • 我有一个名为“segments”的数据帧,看起来像这样: 我想让它看起来像这样。其中Outdegree是包含列A中的值的行数,例如10135在3行中,因此每行Outdegree设置为3: 以下是我正在尝试但不起作用的内容: 该代码将所有行相加,并将总计值提供给OUTDEGREE列