如何将标头添加到 PySpark DataFrame?
Posted
技术标签:
【中文标题】如何将标头添加到 PySpark DataFrame?【英文标题】:How do I add headers to a PySpark DataFrame? 【发布时间】:2019-05-11 05:55:29 【问题描述】:我创建了一个没有标头的 PySpark RDD(从 XML 转换为 CSV)。我需要将其转换为带有标头的 DataFrame 以对其执行一些 SparkSQL 查询。我似乎找不到添加标题的简单方法。大多数示例都从已经有标题的数据集开始。
df = spark.read.csv('some.csv', header=True, schema=schema)
但是,我需要附加标题。
headers = ['a', 'b', 'c', 'd']
这似乎是一个微不足道的问题,我不确定为什么我找不到可行的解决方案。谢谢。
【问题讨论】:
如果标题不存在,您可以指定具有 col 名称、数据类型、可为空的架构。然后就可以使用 SparkSQL了。 太好了,谢谢。我会试试的。我对 Spark 很陌生,有时我会遇到一些琐碎的语法类型的事情。 【参考方案1】:rdd.toDF(schema=['a', 'b', 'c', 'd']
【讨论】:
【参考方案2】:像这样...如果您的 csv 不包含标题行,您需要指定架构和 .option("header", "false")
spark.version
'2.3.2'
! cat sample.csv
1, 2.0,"hello"
3, 4.0, "there"
5, 6.0, "how are you?"
PATH = "sample.csv"
from pyspark.sql.functions import *
from pyspark.sql.types import *
schema = StructType([\
StructField("col1", IntegerType(), True),\
StructField("col2", FloatType(), True),\
StructField("col3", StringType(), True)])
csvFile = spark.read.format("csv")\
.option("header", "false")\
.schema(schema)\
.load(PATH)
csvFile.show()
+----+----+---------------+
|col1|col2| col3|
+----+----+---------------+
| 1| 2.0| hello|
| 3| 4.0| "there"|
| 5| 6.0| "how are you?"|
+----+----+---------------+
# if you have rdd and want to convert straight to df
rdd = sc.textFile(PATH)
# just showing rows
for i in rdd.collect(): print(i)
1, 2.0,"hello"
3, 4.0, "there"
5, 6.0, "how are you?"
# use Row to construct a schema from rdd
from pyspark.sql import Row
csvDF = rdd\
.map(lambda x: Row(col1 = int(x.split(",")[0]),\
col2 = float(x.split(",")[1]),\
col3 = str(x.split(",")[2]))).toDF()
csvDF.show()
+----+----+---------------+
|col1|col2| col3|
+----+----+---------------+
| 1| 2.0| "hello"|
| 3| 4.0| "there"|
| 5| 6.0| "how are you?"|
+----+----+---------------+
csvDF.printSchema()
root
|-- col1: long (nullable = true)
|-- col2: double (nullable = true)
|-- col3: string (nullable = true)
【讨论】:
谢谢@thePurplePython。我所拥有的是一个 RDD,它是一个没有标题的逗号分隔文本文件。当我将它保存到我的硬盘驱动器时,它被分成 100 个分区。我想跳过保存部分并从逗号分隔的 RDD 创建一个 DF。所以我需要添加标题并将RDD转换为DF。我该怎么做? 我有一个逗号分隔文本文件的 RDD:“1,2.0,hello/3,4.0,there/5,6.0,你好吗?”我需要将其转换为 DF,正如您在上面所展示的那样。任何建议表示赞赏。谢谢。 谢谢。我试过了,但它给了我一个错误。我检查了我的 RDD 类型和 type(RDD) = pyspark.rdd.PipelinedRDD。如何将管道 RDD 转换为数据帧? 我不确定你的 rdd 是什么样的......试试这个 => ***.com/questions/48111066/…以上是关于如何将标头添加到 PySpark DataFrame?的主要内容,如果未能解决你的问题,请参考以下文章
Pandas to PySpark给出OOM错误而不是溢出到磁盘[重复]
如何将 python 列表添加到 pyspark 列? [复制]