小编Yue*_*Lyu的帖子

PySpark:当另一个列值满足条件时修改列值

我有一个PySpark Dataframe,它有两列Id和rank,

+---+----+
| Id|Rank|
+---+----+
|  a|   5|
|  b|   7|
|  c|   8|
|  d|   1|
+---+----+
Run Code Online (Sandbox Code Playgroud)

对于每一行,如果Rank大于5,我希望用"other"替换Id.

如果我使用伪代码来解释:

For row in df:
  if row.Rank>5:
     then replace(row.Id,"other")
Run Code Online (Sandbox Code Playgroud)

结果应该是这样的,

+-----+----+
|   Id|Rank|
+-----+----+
|    a|   5|
|other|   7|
|other|   8|
|    d|   1|
+-----+----+
Run Code Online (Sandbox Code Playgroud)

任何线索如何实现这一目标?谢谢!!!


要创建此Dataframe:

df = spark.createDataFrame([('a',5),('b',7),('c',8),('d',1)], ["Id","Rank"])
Run Code Online (Sandbox Code Playgroud)

apache-spark apache-spark-sql pyspark spark-dataframe pyspark-sql

11
推荐指数
2
解决办法
2万
查看次数

Pyspark:通过搜索字典替换列中的值

我是 PySpark 的新手。

我有一个DataFrame df包含“device_type”列的 Spark 。

我想将“平板电脑”或“电话”中的每个值替换为“电话”,并将“PC”替换为“桌面”。

在 Python 中,我可以执行以下操作,

deviceDict = {'Tablet':'Mobile','Phone':'Mobile','PC':'Desktop'}
df['device_type'] = df['device_type'].replace(deviceDict,inplace=False)
Run Code Online (Sandbox Code Playgroud)

如何使用 PySpark 实现这一目标?谢谢!

python dataframe apache-spark apache-spark-sql pyspark

9
推荐指数
5
解决办法
2万
查看次数

PySpark:列的绝对值.TypeError:需要一个float

我有一个数据帧df创建如下,

schema = StructType([StructField('Id', StringType(), False),
                     StructField('Value', FloatType(), False)])  
df = spark.createDataFrame([('a',5.0),('b',1.0),('c',-0.3)],schema)
Run Code Online (Sandbox Code Playgroud)

看起来像

+---+-----+
| Id|Value|
+---+-----+
|  a|  5.0|
|  b|  1.0|
|  c| -0.3|
+---+-----+
Run Code Online (Sandbox Code Playgroud)

现在我想取"值"的绝对值,它应该返回

+---+-----+
| Id|Value|
+---+-----+
|  a|  5.0|
|  b|  1.0|
|  c|  0.3|
+---+-----+
Run Code Online (Sandbox Code Playgroud)

我试过了

df = df.withColumn('Value',math.fabs(df.Value))
Run Code Online (Sandbox Code Playgroud)

但它抱怨TypeError:需要一个浮点数.但是,Value列是使用FloatType()指定的.

有关如何正确执行此操作的任何线索?谢谢!

python apache-spark apache-spark-sql pyspark pyspark-sql

4
推荐指数
1
解决办法
1万
查看次数

PySpark:添加一个新列,其中包含从列创建的元组

这里我创建了一个dateframe,如下所示,

df = spark.createDataFrame([('a',5,'R','X'),('b',7,'G','S'),('c',8,'G','S')], 
                       ["Id","V1","V2","V3"])
Run Code Online (Sandbox Code Playgroud)

看起来像

+---+---+---+---+
| Id| V1| V2| V3|
+---+---+---+---+
|  a|  5|  R|  X|
|  b|  7|  G|  S|
|  c|  8|  G|  S|
+---+---+---+---+
Run Code Online (Sandbox Code Playgroud)

我想添加一个由V1,V2,V3组成的元组列.

结果应该是这样的

+---+---+---+---+-------+
| Id| V1| V2| V3|V_tuple|
+---+---+---+---+-------+
|  a|  5|  R|  X|(5,R,X)|
|  b|  7|  G|  S|(7,G,S)|
|  c|  8|  G|  S|(8,G,S)|
+---+---+---+---+-------+
Run Code Online (Sandbox Code Playgroud)

我曾尝试使用与Python类似的syntex,但它不起作用:

df.withColumn("V_tuple",list(zip(df.V1,df.V2,df.V3)))
Run Code Online (Sandbox Code Playgroud)

TypeError:zip参数#1必须支持迭代.

任何帮助,将不胜感激!

python apache-spark apache-spark-sql pyspark spark-dataframe

4
推荐指数
2
解决办法
6311
查看次数