Pyspark list to rdd 和 split function inside map 抛出错误

Pyspark list to rdd and split function inside map throws error

pyspark 中的这段代码有什么问题

 raw_data = ["James,Smith,36636,M,3000",
    "Michael,Rose,40288,M,4000",
    "Robert,Williams,42114,M,4000",
    "Maria,Anne,39192,F,4000",
    "Jen,Mary,899,F,-1"
    ]

下面的代码抛出错误:未解析的引用 m

 dataRDD = spark.sparkContext.parallelize(raw_data)
 mappedRDD = dataRDD.map(lambda m: \
                        arr=m.split(",") \
                        (arr[0],arr[1]))

 print(mappedRDD.collect())

我用下面的样式重写了相同的逻辑并且有效

 dataRDD = spark.sparkContext.parallelize(raw_data)
 mappedRDD = dataRDD.map(lambda m: (m.split(",")[0],m.split(",")[1]))

不可能,因为 lambda 函数只接受表达式。你所做的是你试图在 lambda 函数中定义 arr 对象,这就是它抛出错误的原因。后一种方法允许您跳过该定义,因此代码有效。

您可以阅读更多相关内容,例如

此外,如果你的情况只是在拆分后取每个列表的前 2 个元素,那么你可以更精简你的代码:

mappedRDD = dataRDD.map(lambda m: m.split(",")[:2])