Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Apache spark 如何从pyspark中的列表创建数据帧而不使用for循环?_Apache Spark_Pyspark_Apache Spark Sql_Spark Dataframe_Pyspark Sql - Fatal编程技术网

Apache spark 如何从pyspark中的列表创建数据帧而不使用for循环?

Apache spark 如何从pyspark中的列表创建数据帧而不使用for循环?,apache-spark,pyspark,apache-spark-sql,spark-dataframe,pyspark-sql,Apache Spark,Pyspark,Apache Spark Sql,Spark Dataframe,Pyspark Sql,我有如下清单: rrr=[[1,3,1,2,3,2,3,3,2,1,4,1,2,4,2]] df_输入=[] 接下来我定义了如下标题: df_头=['sid','tid','srank'] 使用for循环将数据追加到空列表中: 对于rrr中的i: 对于i中的j: df_input.appendj[0],j[1][0],j[1][1] df_输入 输出:[1,3,1,2,3,2,3,3,2] 创建数据框,如下所示: df=spark.createDataFramedf_输入,df_标题 df.sh

我有如下清单:

rrr=[[1,3,1,2,3,2,3,3,2,1,4,1,2,4,2]] df_输入=[] 接下来我定义了如下标题:

df_头=['sid','tid','srank'] 使用for循环将数据追加到空列表中:

对于rrr中的i: 对于i中的j: df_input.appendj[0],j[1][0],j[1][1] df_输入 输出:[1,3,1,2,3,2,3,3,2] 创建数据框,如下所示:

df=spark.createDataFramedf_输入,df_标题 df.show +--+--+---+ |sid | tid | srank| +--+--+---+ | 1| 3| 1| | 2| 3| 2| | 3| 3| 2| +--+--+---+ 现在我的问题是如何创建数据帧而不使用任何外部for循环,如上面所述。输入列表包含1条以上的缺失记录。

解决方案一:引入toDF转换,但修改输入

解决方案2:使用请求的输入矩阵,使用列表理解,numpy展平和重塑


当您意识到初始列表是嵌套列表时。i、 e.将实际列表作为外部列表的唯一元素,然后您将看到,仅考虑其第一个也是唯一的元素,解决方案就很容易实现:

spark.version u'2.1.1' 从pyspark.sql导入行 您的确切数据: rrr=[[1,3,1,2,3,2,3,3,2,1,4,1,2,4,2]] df_头=['sid','tid','srank'] df=sc.parallelizerr[0]。映射lambda x:Rowx[0],x[1][0],x[1][1]。toDFschema=df_头 df.show +--+--+---+ |sid | tid | srank| +--+--+---+ | 1| 3| 1| | 2| 3| 2| | 3| 3| 2| | 1| 4| 1| | 2| 4| 2| +--+--+---+
从CSV、JDBC源代码、配置单元表、HDFS上的拼花地板/avro文件中读取。如果问题是for循环,请查看列表理解…列表理解可能不起作用。我有一个大的数据集,所以我不想使用列表来解决这个问题,什么是1缺失记录???我的原始列表包含多个缺失对象,即间接地我告诉你我添加了什么列表对象,只是为了样本。请检查数据格式,rrr=[[1,3,1,2,3,3,2]]不像ar=[[1,3,1],[2,3,2],[3,3,2]]@在第二个例子中,我拿着它。但我忘记了它的声明。我立即更新我在执行>>>flat=flat.ReformalEnFlat/3,3回溯最近的调用last:File,第1行,在TypeError中:“float”对象不能解释为integersubstitute intlenflat/3来删除错误。。。但是,如果结构发生变化,平面阵列不能完全被3整除,这将无法正常工作。主要的假设是输入的结构不会改变。@saikumar&答辩人,事实上:为什么要费心于numpy数组、展平、重塑、转换为整数等等?第一个干净的解决方案不起作用吗??
from pyspark.sql import Row    
ar=[[1,(3,1)],[2, (3,2)],[3, (3,2)]]
sc.parallelize(ar).map(lambda x: Row(sid=x[0], tid=x[1][0],srank=x[1][1])).toDF().show()

+---+-----+---+
|sid|srank|tid|
+---+-----+---+
|  1|    1|  3|
|  2|    2|  3|
|  3|    2|  3|
+---+-----+---+
import numpy as np 
x=[[(1,(3,1)),(2, (3,2)),(3, (3, 2))]]
ar=[[(j[0],j[1][0],j[1][1]) for j in i] for i in x]
flat=np.array(ar).flatten()
flat=flat.reshape(len(flat)/3, 3)
sc.parallelize(flat).map(lambda x: Row(sid=int(x[0]),tid=int(x[1]),srank=int(x[2]))).toDF().show()

+---+-----+---+
|sid|srank|tid|
+---+-----+---+
|  1|    1|  3|
|  2|    2|  3|
|  3|    2|  3|
+---+-----+---+

#works also with N,M matrix
number_columns=3
x=[[(1,(3,1)),(2, (3,2)),(3, (3, 2))],[(5,(6,7)),(8, (9,10)),(11, (12, 13))]]
ar=[[(j[0],j[1][0],j[1][1]) for j in i] for i in x]
flat=np.array(ar).flatten()
flat=flat.reshape(int(len(flat)/number_columns), number_columns)
sc.parallelize(flat).map(lambda x: Row(sid=int(x[0]),tid=int(x[1]),srank=int(x[2]))).toDF().show()
+---+-----+---+
|sid|srank|tid|
+---+-----+---+
|  1|    1|  3|
|  2|    2|  3|
|  3|    2|  3|
|  5|    7|  6|
|  8|   10|  9|
| 11|   13| 12|
+---+-----+---+