Python spark df中是否有可用applymap替代的功能?

Python spark df中是否有可用applymap替代的功能?,python,pandas,apache-spark,pyspark,google-cloud-dataproc,Python,Pandas,Apache Spark,Pyspark,Google Cloud Dataproc,下面是为pandas df编写的代码,由于内存问题,我不得不转到PySpark,这就是为什么我需要转换此代码,以便可以为spark df执行它。我试着直接运行它,但它会产生一个错误。在PySpark中,下面的代码有什么替代方案 def units(x): if x <= 0: return 0 if x >= 1: return 1 sets = df.applymap(units) def单位(x): 如果x=1: 返回1 集合=

下面是为pandas df编写的代码,由于内存问题,我不得不转到PySpark,这就是为什么我需要转换此代码,以便可以为spark df执行它。我试着直接运行它,但它会产生一个错误。在PySpark中,下面的代码有什么替代方案

def units(x):
    if x <= 0:
        return 0
    if x >= 1:
        return 1

sets = df.applymap(units)
def单位(x):
如果x=1:
返回1
集合=df.applymap(单位)
下面是我得到的错误:

AttributeErrorTraceback (most recent call last)
<ipython-input-20-7e54b4e7a7e7> in <module>()
----> 1 sets = pivoted.applymap(units)

/usr/lib/spark/python/pyspark/sql/dataframe.py in __getattr__(self, name)
   1180         if name not in self.columns:
   1181             raise AttributeError(
-> 1182                 "'%s' object has no attribute '%s'" % (self.__class__.__name__, name))
   1183         jc = self._jdf.apply(name)
   1184         return Column(jc)

AttributeError: 'DataFrame' object has no attribute 'applymap'
AttributeErrorTraceback(最近一次调用上次)
在()
---->1套=旋转的applymap(单位)
/usr/lib/spark/python/pyspark/sql/dataframe.py in__getattr__(self,name)
1180如果名称不在self.columns中:
1181提高属性错误(
->1182“'%s'对象没有属性'%s'”%(self.\uuuuuuuu class\uuuuuuu.\uuuuuu name\uuuuuuuuu,name))
1183 jc=self.\u jdf.apply(名称)
1184返回柱(jc)
AttributeError:“DataFrame”对象没有属性“applymap”

您可以将单位函数包装为自定义项:

from pyspark.sql.types import LongType
from pyspark.sql.functions import udf, col

def units(x):
    if x <= 0:
        return 0
    if x >= 1:
        return 1

units_udf = udf(lambda x: units(x), LongType())

df = spark.createDataFrame([(-1,), (0,), (1,), (2,)], ['id'])

df.show()
+---+                                                                           
| id|
+---+
| -1|
|  0|
|  1|
|  2|
+---+

sets = df.withColumn("id", units_udf(col("id")))
sets.show()
+---+
| id|
+---+
|  0|
|  0|
|  1|
|  1|
+---+
从pyspark.sql.types导入LongType
从pyspark.sql.functions导入udf,col
def装置(x):
如果x=1:
返回1
units\u udf=udf(λx:units(x),LongType())
df=spark.createDataFrame([(-1,),(0,),(1,),(2,),['id']))
df.show()
+---+                                                                           
|身份证|
+---+
| -1|
|  0|
|  1|
|  2|
+---+
sets=df.withColumn(“id”),units\U udf(col(“id”))
set.show()
+---+
|身份证|
+---+
|  0|
|  0|
|  1|
|  1|
+---+

您可以将单位函数包装为自定义项:

from pyspark.sql.types import LongType
from pyspark.sql.functions import udf, col

def units(x):
    if x <= 0:
        return 0
    if x >= 1:
        return 1

units_udf = udf(lambda x: units(x), LongType())

df = spark.createDataFrame([(-1,), (0,), (1,), (2,)], ['id'])

df.show()
+---+                                                                           
| id|
+---+
| -1|
|  0|
|  1|
|  2|
+---+

sets = df.withColumn("id", units_udf(col("id")))
sets.show()
+---+
| id|
+---+
|  0|
|  0|
|  1|
|  1|
+---+
从pyspark.sql.types导入LongType
从pyspark.sql.functions导入udf,col
def装置(x):
如果x=1:
返回1
units\u udf=udf(λx:units(x),LongType())
df=spark.createDataFrame([(-1,),(0,),(1,),(2,),['id']))
df.show()
+---+                                                                           
|身份证|
+---+
| -1|
|  0|
|  1|
|  2|
+---+
sets=df.withColumn(“id”),units\U udf(col(“id”))
set.show()
+---+
|身份证|
+---+
|  0|
|  0|
|  1|
|  1|
+---+

Pyspark数据帧没有applymap属性,请查看何时+其他:
df.select(*[F.when(F.col(i))Pyspark数据帧没有applymap属性,请查看何时+其他:
df.select(*[F.when(F.col(i))Pyspark数据帧没有applymap属性,请查看何时+其他:
df.select(*[F.when(F.col(i)如果我想将udf应用于所有列,即整个数据框,该怎么办?我可以想到两种方法。您可以将数据框的所有列转换为复杂类型(struct)的单个列,并将该列传递给udf。或者您可以将数据框转换为行的rdd,调用该rdd上的映射(映射内的函数必须接受并返回行类型),然后转换回dataframe。如果我想将udf应用于所有列,即整个dataframe,该怎么办?我可以想到两种方法。可以将dataframe的所有列转换为复杂类型(struct)的单个列,并将该列传递给UDF。或者,您可以将数据帧转换为行的rdd,调用该rdd上的映射(映射中的函数必须接受并返回行类型),然后转换回数据帧。