Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
List Pyspark列不可迭代_List_Apache Spark_Dictionary_Pyspark_Iterable - Fatal编程技术网

List Pyspark列不可迭代

List Pyspark列不可迭代,list,apache-spark,dictionary,pyspark,iterable,List,Apache Spark,Dictionary,Pyspark,Iterable,我有一个类似于此的df: old_df = sqlContext.createDataFrame( [ ('375', 20), ('265', 20), ('052', 20), ('111', None), ], ['old_col', 'example_new_col_val']) 我需要通过对照列表检查旧列的值来创建一个新列。我是Pyspark的新手,不理解我的错误消息。以下是我尝试过的: from pyspark.sql import funct

我有一个类似于此的df:

old_df = sqlContext.createDataFrame(
 [   ('375', 20),
     ('265', 20),
     ('052', 20),
     ('111', None),
 ],
['old_col', 'example_new_col_val'])
我需要通过对照列表检查旧列的值来创建一个新列。我是Pyspark的新手,不理解我的错误消息。以下是我尝试过的:

from pyspark.sql import functions as F

my_list = ['375', '012', '013','014','015','016']
expr = F.when(F.col("old_col").isin(my_list),F.lit(20)).otherwise(None).alias("new_col")

new_df = old_df.select("*",*expr)   

我的错误消息:
TypeError:Column不可编辑

定义
我的列表
时,请尝试使用:

my_list = list(['375', '012', '013','014','015','016'].toPandas())

其余代码保持不变。

您需要在此处使用
with column()
函数,以便为现有数据帧创建新的


df=df.withColumn(“new\u col”,F.when(F.col(“old\u col”).isin(my\u list),F.lit(“20”)。否则(F.lit(None))

去掉
*expr
-
expr
中的
*
是一列,不应重复/解包

new_df = old_df.select("*",expr)

df.select('*',expr)
是创建新列的一种非常有效的方法。事实上,它优于
with column
,后者已知会导致性能下降。看,是的。但我个人更喜欢分解步骤,而不是方法链接之类的东西:)但谢谢分享谢谢!我一直在做大量的数据争论。这是我正在研究的一个更大问题的一部分。只是想通过把它分解成更小的组件来解决它。