如何将pyspark中的第一行作为标题读取文本文件作为spark上下文

如何将pyspark中的第一行作为标题读取文本文件作为spark上下文,pyspark,pyspark-dataframes,Pyspark,Pyspark Dataframes,在spark上下文中读取文本文件后得到的数据帧 +----+---+------+ | _1| _2| _3| +----+---+------+ |name|age|salary| | sai| 25| 1000| | bum| 30| 1500| | che| 40| null| +----+---+------+ 我需要的数据帧是 +----+---+------+ |name|age|salary| +----+---+------+ | sai| 25| 1000|

在spark上下文中读取文本文件后得到的数据帧

+----+---+------+
|  _1| _2|    _3|
+----+---+------+
|name|age|salary|
| sai| 25|  1000|
| bum| 30|  1500|
| che| 40|  null|
+----+---+------+
我需要的数据帧是

+----+---+------+
|name|age|salary|
+----+---+------+
| sai| 25|  1000|
| bum| 30|  1500|
| che| 40|  null|
+----+---+------+
代码如下:

## from spark context
df_txt=spark.sparkContext.textFile("/FileStore/tables/simple-2.txt")
df_txt1=df_txt.map(lambda x: x.split(" "))
ddf=df_txt1.toDF().show()

您可以使用spark csv阅读器读取逗号分隔文件

要读取文本文件,必须将第一行作为标题,创建一个字符串序列并传递给toDF函数。另外,删除rdd的第一个标头

注意:下面的代码是用spark scala编写的。您可以将其转换为lambda函数,使其在pyspark中工作

import org.apache.spark.sql.functions._
val df = spark.sparkContext.textFile("/FileStore/tables/simple-2.txt")
val header = df.first()
val headerCol: Seq[String] = header.split(",").toList
val filteredRDD = df.filter(x=> x!= header)
val finaldf = filteredRDD.map( _.split(",")).map(w => (w(0),w(1),w(2))).toDF(headerCol: _*)
finaldf.show()

w(0),w(1),w(2)-您必须从文件中定义固定数量的列。

这是pyspark``df_txt=spark.sparkContext.textFile(“/FileStore/tables/simple-2.txt”)中的最终代码df_txt头=df_txt.first()df_txt头\u头\u列表=df_txt头.split(“”)df_txt1=df_头过滤器(lambda x:x!=df_头)##删除标题行df_txt2=df_txt1.map(lambda x:x.split(“”)ddf=df_txt2.toDF(schema=df_txt_header_list).show()```