Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.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 PySpark-广播火花数据帧_Python_Scala_Apache Spark_Pyspark - Fatal编程技术网

Python PySpark-广播火花数据帧

Python PySpark-广播火花数据帧,python,scala,apache-spark,pyspark,Python,Scala,Apache Spark,Pyspark,我正在尝试广播spark数据帧,尝试了几种方法,但无法广播它。我想从另一个数据帧中循环所有列以进行某些处理,其中SchemaWithHeadercolName Result为1。例如,Name、Age和Salary列需要循环 方法1 低于误差 SchemaWithHeader = rdd.map(lambda x: Row(ColName=x[0], Result=bool(x[1]))) AttributeError: 'Broadcast' object has no attribut

我正在尝试广播spark数据帧,尝试了几种方法,但无法广播它。我想从另一个数据帧中循环所有列以进行某些处理,其中
SchemaWithHeader
colName Result为1。例如,Name、Age和Salary列需要循环

  • 方法1
低于误差

 SchemaWithHeader = rdd.map(lambda x: Row(ColName=x[0], Result=bool(x[1])))
AttributeError: 'Broadcast' object has no attribute 'map'
py4j.Py4JException: Method __getstate__([]) does not exist
Dataframe没有任何广播方法。我不是使用SQL查询来连接两个数据帧,而是使用一些循环来访问
SchemaWithHeader
数据帧

  • 方法2
低于误差

 SchemaWithHeader = rdd.map(lambda x: Row(ColName=x[0], Result=bool(x[1])))
AttributeError: 'Broadcast' object has no attribute 'map'
py4j.Py4JException: Method __getstate__([]) does not exist

错误说明一切。。。在下面的代码中

rdd = spark.sparkContext.broadcast(SchemaDFWithoutHeader)
rdd是一个广播变量,在其上使用map do rdd.value。下面是使用它的方法

SchemaWithHeader = rdd.value.map(lambda x: Row(ColName=x[0], Result=bool(x[1])))
希望这有助于。。。与社区保持共享:)

编辑1: 由于您正在广播一个列表,rdd.value将为您提供一个列表作为输出。python中的列表没有映射函数。所以你们在评论中提到了错误。此外,如果您尝试广播RDD,您将得到以下错误 您似乎正试图广播RDD或从操作或转换引用RDD。RDD转换和操作只能由驱动程序调用,不能在其他转换内部调用

基本上,您不能广播RDD,因为它已经是一个分布式数据结构,并且具有分区,并且这些分区已经位于多台计算机上

注意:希望您编写的代码只是为了演示这个问题。因为我无法理解你在这背后的思考过程。然而,答案仍然有效。我建议您在项目中实施之前了解广播变量的概念

干杯


哈吉特

谢谢哈吉特。。。是的,以上代码用于说明问题。我试图将
value.map
rdd
一起使用,但获取错误
'list'对象没有属性“map”
我的道歉。。。我假设你的代码是scala。。。您正在广播一个列表。。。所以当你尝试访问它时,你会得到一个列表。。。如果广播rdd,则会出现错误。我在回答中补充了解释