在pyspark中,我正在尝试读取包含几个文本列的CSV文件。我对pandas
的{{1}}属性做了同样的事情,它读起来很好。但是,当我尝试通过pyspark运行SQL来对相同的数据进行处理时,它会以一种怪异的方式解析数据:
chunksize
输出为:
df = spark.read.csv("data_simple.csv", sep=',', header=True, inferSchema=False)
df.createOrReplaceTempView("table")
spark.sql("""
SELECT new_category from table
""").show(20)
期望值类似于+--------------------+
| new_category|
+--------------------+
| IAB3 - Business|
| IAB22 - Shopping|
| IAB17 - Sports|
| IAB1-7 - Television|
|https://cinpaketi...|
| turgut özal _acc...|
| sulak alan _a3pl...|
| IAB20 - Travel|
| ACJumpStart|
| belki eve dönüş ...|
| hardcore ve jung...|
|IAB13 - Personal ...|
|000 sq . ft . sta...|
| IAB12 - News|
| Posta Kutusu 7:0...|
| IAB5 - Education|
| General|
| Education|
| fingerstyle |
| Blogs|
+--------------------+
only showing top 20 rows
等。但是似乎它也从其他列中获取了值。
我是pyspark的新手,我错过了什么吗?为什么要这样解析?
此外,某些列包含非常长的文本,因此大约20k个字符。当我将IAB3 - Business
传递为True时,它会引发错误:inferSchema
此外,最后,我只想按java.lang.ArrayIndexOutOfBoundsException
按表分组并显示计数。当我第一次这样做时,它会引发错误:
Py4JJavaError:调用o51.showString时发生错误。 :org.apache.spark.SparkException:由于阶段失败而中止作业:阶段1.0中的任务0失败1次,最近一次失败:阶段1.0中的任务0.0丢失(TID 1,本地主机,执行者驱动程序):com.univocity.parsers .common.TextParsingException:java.lang.ArrayIndexOutOfBoundsException-20480 提示:处理的列数可能已超过20480列的限制。使用settings.setMaxColumns(int)定义输入可以具有的最大列数 确保配置正确,并使用与您要解析的输入格式匹配的定界符,引号和转义序列
我在第一次之后第二次运行它时,出现此错误:
Py4JJavaError:调用o105.showString时发生错误。 :org.apache.spark.SparkException:由于阶段失败而中止作业:阶段3.0中的任务0失败1次,最近一次失败:阶段3.0中的任务0.0(TID 6,本地主机,执行程序驱动程序)丢失:com.univocity.parsers .common.TextParsingException:java.lang.ArrayIndexOutOfBoundsException-null
它的代码是:
new_category
如果您需要,我可以提供其他信息。谢谢。