Apache spark 如何向PySpark数据帧添加标题?

Apache spark 如何向PySpark数据帧添加标题?,apache-spark,pyspark,apache-spark-sql,pyspark-sql,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Sql,我创建了一个PySpark RDD(从XML转换为CSV),它没有标题。我需要将其转换为带有标题的数据帧,以便对其执行一些SparkSQL查询。我似乎找不到添加标题的简单方法。大多数示例都是从已经有标题的数据集开始的 df = spark.read.csv('some.csv', header=True, schema=schema) 但是,我需要附加标题 headers = ['a', 'b', 'c', 'd'] 这似乎是一个微不足道的问题,我不知道为什么我找不到一个有效

我创建了一个PySpark RDD(从XML转换为CSV),它没有标题。我需要将其转换为带有标题的数据帧,以便对其执行一些SparkSQL查询。我似乎找不到添加标题的简单方法。大多数示例都是从已经有标题的数据集开始的

    df = spark.read.csv('some.csv', header=True, schema=schema)
但是,我需要附加标题

    headers = ['a', 'b', 'c', 'd']

这似乎是一个微不足道的问题,我不知道为什么我找不到一个有效的解决方案。谢谢。

像这样。。。如果csv不包含标题行,则需要指定架构和
。选项(“header”,“false”)

spark.version
'2.3.2'
! cat sample.csv
1,2.0,“你好”
3,4.0,“那里”
5,6.0,“你好吗?”
PATH=“sample.csv”
从pyspark.sql.functions导入*
从pyspark.sql.types导入*
schema=StructType([\
StructField(“col1”,IntegerType(),True)\
StructField(“col2”,FloatType(),True)\
StructField(“col3”,StringType(),True)])
csvFile=spark.read.format(“csv”)\
.选项(“标题”、“假”)\
.schema(schema)\
.加载(路径)
csvFile.show()
+----+----+---------------+
|col1 | col2 | col3|
+----+----+---------------+
|1 | 2.0 |你好|
|3 | 4.0 |“那里”|
|“你好吗?”|
+----+----+---------------+
#如果您有rdd并希望直接转换为df
rdd=sc.textFile(路径)
#只是显示行
对于rdd.collect()中的i:print(i)
1,2.0,“你好”
3,4.0,“那里”
5,6.0,“你好吗?”
#使用Row从rdd构造模式
从pyspark.sql导入行
csvDF=rdd\
.map(lambda x:Row(col1=int(x.split(“,”)[0])\
col2=浮动(x.分割(“,”[1])\
col3=str(x.split(“,”[2])).toDF()
csvDF.show()
+----+----+---------------+
|col1 | col2 | col3|
+----+----+---------------+
|1 | 2.0 |“你好”|
|3 | 4.0 |“那里”|
|“你好吗?”|
+----+----+---------------+
csvDF.printSchema()
根
|--col1:long(nullable=true)
|--col2:double(nullable=true)
|--col3:string(nullable=true)

像这样。。。如果csv不包含标题行,则需要指定架构和
。选项(“header”,“false”)

spark.version
'2.3.2'
! cat sample.csv
1,2.0,“你好”
3,4.0,“那里”
5,6.0,“你好吗?”
PATH=“sample.csv”
从pyspark.sql.functions导入*
从pyspark.sql.types导入*
schema=StructType([\
StructField(“col1”,IntegerType(),True)\
StructField(“col2”,FloatType(),True)\
StructField(“col3”,StringType(),True)])
csvFile=spark.read.format(“csv”)\
.选项(“标题”、“假”)\
.schema(schema)\
.加载(路径)
csvFile.show()
+----+----+---------------+
|col1 | col2 | col3|
+----+----+---------------+
|1 | 2.0 |你好|
|3 | 4.0 |“那里”|
|“你好吗?”|
+----+----+---------------+
#如果您有rdd并希望直接转换为df
rdd=sc.textFile(路径)
#只是显示行
对于rdd.collect()中的i:print(i)
1,2.0,“你好”
3,4.0,“那里”
5,6.0,“你好吗?”
#使用Row从rdd构造模式
从pyspark.sql导入行
csvDF=rdd\
.map(lambda x:Row(col1=int(x.split(“,”)[0])\
col2=浮动(x.分割(“,”[1])\
col3=str(x.split(“,”[2])).toDF()
csvDF.show()
+----+----+---------------+
|col1 | col2 | col3|
+----+----+---------------+
|1 | 2.0 |“你好”|
|3 | 4.0 |“那里”|
|“你好吗?”|
+----+----+---------------+
csvDF.printSchema()
根
|--col1:long(nullable=true)
|--col2:double(nullable=true)
|--col3:string(nullable=true)

rdd.toDF(模式=['a','b','c','d']

rdd.toDF(模式=['a','b','c','d']

如果没有标题,您可以指定具有col name、datatype、nullable的模式。然后您可以使用SparkSQL。太好了,谢谢。我会尝试一下。我对Spark非常陌生,有时我会坚持使用琐碎的语法类型。如果没有标题,您可以指定具有col name、datatype、nul的模式标签。然后你可以使用SparkSQL。太好了,谢谢。我会尝试一下。我对Spark非常陌生,有时我会被一些琐碎的语法类型所困扰。谢谢@thePurplePython。我有一个RDD,它是一个逗号分隔的文本文件,没有标题。当我将它保存到硬盘时,它被分成100个分区。我想跳过t他保存了一部分,并从逗号分隔的RDD创建了一个DF。所以我需要添加标题并将RDD转换为DF。我该怎么做?我拥有的是一个逗号分隔的文本文件的RDD:“1,2.0,你好/3,4.0,那里/5,6.0,你好吗?”我需要将其转换为DF,如您所示。任何建议都将不胜感激。谢谢。谢谢。我尝试过,但它给了我一个错误。我检查了我的RDD类型和类型(RDD)=pyspark.rdd.PipelinedRDD.如何将管道rdd转换为数据帧?我不确定您的rdd是什么样子…试试这个=>Thank you@thePurplePython。我拥有的是一个rdd,它是一个逗号分隔的文本文件,没有标题。当我将它保存到硬盘时,它被分成100个分区。我想跳过保存部分并创建一个DF从逗号分隔的RDD。所以我需要添加标题并将RDD转换为DF。我该怎么做?我拥有的是逗号分隔文本文件的RDD:“1,2.0,你好/3,4.0,那里/5,6.0,你好吗?”我需要将其转换为DF,如您所示。任何建议都将不胜感激。谢谢。谢谢。我尝试过,但它给了我一个错误。我检查了我的RDD类型和类型(RDD)=pyspark.RDD.PipelinedRDD。我如何将管道RDD转换为数据帧?我不确定您的RDD是什么样子……试试这个=>