Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带UDF的with列产生AttributeError:';非类型';对象没有属性'_jvm';_Python_Dataframe_Lambda_Pyspark_User Defined Functions - Fatal编程技术网

Python 带UDF的with列产生AttributeError:';非类型';对象没有属性'_jvm';

Python 带UDF的with列产生AttributeError:';非类型';对象没有属性'_jvm';,python,dataframe,lambda,pyspark,user-defined-functions,Python,Dataframe,Lambda,Pyspark,User Defined Functions,我试图用一个UDF替换spark数据帧中的一些值,但仍然会得到相同的错误 在调试过程中,我发现它实际上并不依赖于我使用的数据帧,也不依赖于我编写的函数。这里有一个MWE,它有一个简单的lambda函数,我无法正常执行。这基本上应该通过将值与自身连接来修改第一列中的所有值 l = [('Alice', 1)] df = sqlContext.createDataFrame(l) df.show() #+-----+---+ #| _1| _2| #+-----+---+ #|Alice|

我试图用一个UDF替换spark数据帧中的一些值,但仍然会得到相同的错误

在调试过程中,我发现它实际上并不依赖于我使用的数据帧,也不依赖于我编写的函数。这里有一个MWE,它有一个简单的lambda函数,我无法正常执行。这基本上应该通过将值与自身连接来修改第一列中的所有值

l = [('Alice', 1)]
df = sqlContext.createDataFrame(l)
df.show()

#+-----+---+
#|   _1| _2|
#+-----+---+
#|Alice|  1|
#+-----+---+

df = df.withColumn("_1", udf(lambda x : lit(x+x), StringType())(df["_1"]))
df.show()
#Alice should now become AliceAlice
这就是我得到的错误,提到了一个相当隐晦的“AttributeError:'NoneType'对象没有属性'\uJVM'

文件“/cdh/opt/cloudera/parcels/cdh-5.11.1-1.cdh5.11.1.p0.4/lib/spark/python/pyspark/worker.py”,第111行,主视图
过程()
文件“/cdh/opt/cloudera/parcels/cdh-5.11.1-1.cdh5.11.1.p0.4/lib/spark/python/pyspark/worker.py”,第106行,处理中
serializer.dump_流(func(拆分索引,迭代器),outfile)
文件“/cdh/opt/cloudera/parcels/cdh-5.11.1-1.cdh5.11.1.p0.4/lib/spark/python/pyspark/serializers.py”,第263行,在dump_流中
vs=列表(itertools.islice(迭代器,批处理))
文件“/cdh/opt/cloudera/parcels/cdh-5.11.1-1.cdh5.11.1.p0.4/lib/spark/python/pyspark/sql/functions.py”,第1566行,在
func=lambda,it:map(lambda x:returnType.toInternal(f(*x)),it)
文件“”,第1行,在
文件“/cdh/opt/cloudera/parcels/cdh-5.11.1-1.cdh5.11.1.p0.4/lib/spark/python/pyspark/sql/functions.py”,第39行_
jc=getattr(sc.\u jvm.functions,name)(如果是instance(col,Column),则为col.\u jc,否则为col)
AttributeError:“非类型”对象没有属性“\u jvm”

我确信我对语法感到困惑,无法正确获取类型(感谢duck键入!),但我发现的每个withColumn和lambda函数示例似乎都与此相似

您非常接近,它在抱怨,因为您不能在udf中使用
lit
:)
lit
用于列级别,而不是行级别

l = [('Alice', 1)]
df = spark.createDataFrame(l)
df.show()

+-----+---+
|   _1| _2|
+-----+---+
|Alice|  1|
+-----+---+

df = df.withColumn("_1", udf(lambda x: x+x, StringType())("_1"))
# this would produce the same result, but lit is not necessary here
# df = df.withColumn("_1", udf(lambda x: x+x, StringType()(lit(df["_1"])))
df.show()

+----------+---+
|        _1| _2|
+----------+---+
|AliceAlice|  1|
+----------+---+

您非常接近,它在抱怨,因为您无法在udf中使用
lit
:)
lit
用于列级别,而不是行级别

l = [('Alice', 1)]
df = spark.createDataFrame(l)
df.show()

+-----+---+
|   _1| _2|
+-----+---+
|Alice|  1|
+-----+---+

df = df.withColumn("_1", udf(lambda x: x+x, StringType())("_1"))
# this would produce the same result, but lit is not necessary here
# df = df.withColumn("_1", udf(lambda x: x+x, StringType()(lit(df["_1"])))
df.show()

+----------+---+
|        _1| _2|
+----------+---+
|AliceAlice|  1|
+----------+---+

你能看一看类似的问题吗?试图实现类似的目标,但无法实现。你能看一看类似的问题吗?试图实现类似的目标,但无法实现。