apachespark—对pysaprkDataframe中的列值应用阈值,并将值转换为二进制0或1

vzgqcmou  于 2021-05-16  发布在  Spark
关注(0)|答案(1)|浏览(378)

我有一个Pypark数据框

simpleData = [("person0",10, 10), \
    ("person1",1, 1), \
    ("person2",1, 0), \
    ("person3",5, 1), \
  ]
columns= ["persons_name","A", 'B']
exp = spark.createDataFrame(data = simpleData, schema = columns)

exp.printSchema()
exp.show()

看起来像

root
 |-- persons_name: string (nullable = true)
 |-- A: long (nullable = true)
 |-- B: long (nullable = true)
 |-- total: long (nullable = true)

+------------+---+---+
|persons_name|  A|  B|
+------------+---+---+
|     person0| 10| 10|
|     person1|  1|  1|   
|     person2|  1|  0|    
|     person3|  5|  1|    
+------------+---+---+

现在我想对a列和b列的值应用阈值2,这样列中小于阈值的任何值都将变为0,大于阈值的值将变为1。
最终结果应该是-

+------------+---+---+
|persons_name|  A|  B|
+------------+---+---+
|     person0|  1|  1|
|     person1|  0|  0|   
|     person2|  0|  0|    
|     person3|  1|  0|    
+------------+---+---+

我怎样才能做到这一点?

flvtvl50

flvtvl501#

threshold = 2
exp.select(
    [(F.col(col) > F.lit(threshold)).cast('int').alias(col) for col in ['A', 'B']]
)

相关问题