当前位置: 首页 > 知识库问答 >
问题:

无法读取以pyspark为单位的csv文件

经清野
2023-03-14

我尝试使用pyspark读取csv文件,并使用以下pyspark代码:

tr_df = spark.read.csv("/data/file.csv",
                       header=True, inferSchema=True
                      )
tr_df.head(5)

但是我得到了这个错误:

ValueError                                Traceback (most recent call last)
<ipython-input-53-03432bbf269d> in <module>
----> 1 tr_df.head(5)

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/pyspark/sql/dataframe.py
~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/pyspark/sql/dataframe.py
~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/pyspark/sql/dataframe.py

在collect(self)532中使用SCCallSiteSync(self._sc)作为CSS:533 sock_info=self._jdf.collectTopython()-->534返回列表(_load_from_socket(sock_info,BatchedSerializer()))535 536@ignore_unicode_prefix

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/pyspark/serializers.py

在load_stream(self,stream)145中true:146 try:-->147产生self._read_with_length(stream)148除eoferror:149返回

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/pyspark/serializers.py

在_read_with_length(self,stream)170中,如果len(obj) 172返回self.loads(obj)173 174 def转储(self,obj):

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/pyspark/serializers.py

在loads(self,obj,encoding)中,如果sys.version>='3':579 def loads(self,obj,encoding=“bytes”):-->580返回pickle.loads(obj,encoding=encoding)581否则:582 def loads(self,obj,encoding=none):

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/pyspark/sql/types.py

in_parse_datatype_json_string(json_string)867>>>>check_datatype(complex_maptype)868“”-->869 return_parse_datatype_json_value(json.loads(json_string))870 871

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/pyspark/sql/types.py

in_parse_datatype_json_value(json_value)884 tpe=json_value[“type”]885如果tpe in_all_complex_types:-->886 return_all_complex_types[tpe].fromjson(json_value)887 elif tpe=='udt':888 return userdefinedtype.fromjson(json_value)

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/pyspark/sql/types.py

在fromJson(cls,json)575@ClassMethod 576 def fromJson(cls,json):-->577返回StructType([structfield.fromJson(f)for f in json[“fields”]])578 579 def fieldNames(self):

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/pyspark/sql/types.py

在(.0)575@ClassMethod 576 def fromJson(cls,json):-->577返回StructType([structfield.fromJson(f)for f in json[“fields”]])578 579 def fieldNames(self):

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/pyspark/sql/types.py

在fromJson(cls,json)432 def fromJson(cls,json):433 return StructField(json[“name”],-->434_parse_datatype_json_value(json[“type”]),435 json[“nullable”],436 json[“metadata”])

~/anaconda3/envs/naboo-env/lib/python3.6/site-packages/pyspark/sql/types.py

在_parse_datatype_json_value(json_value)880返回DecimalType(int(M.group(1)),int(M.group(2)))881 else:-->882引发ValueError(“不能解析数据类型:%s”%json_value)883 else:884 tpe=json_value[“type”]

ValueError: Could not parse datatype: decimal(17,-24)

有人能帮我解决这个问题吗?

谢谢

共有1个答案

米承嗣
2023-03-14

您的某个列中的datatype似乎有问题。因此它的抛出错误。读取时删除inferSchema=true选项。读取数据后,尝试分析datatype并在需要时进行任何更正,然后应用您自己的架构。

 类似资料:
  • 场景是:EventHub- 文件格式:CSV(带引号、管道分隔和自定义架构) 我正在尝试读取来自eventhub的CSV字符串。Spark成功地使用正确的模式创建了数据框,但在每条消息之后,数据框最终都是空的。 我设法在流媒体环境之外做了一些测试,当从文件中获取数据时,一切都很顺利,但当数据来自字符串时,一切都失败了。 所以我找到了一些链接来帮助我,但没有一个工作: can-i-read-a-cs

  • 我不熟悉Python及其库pyspark,我需要进行一些POC,其中我需要读取来自上游的CSV文件。我收到的CSV文件没有任何分隔符,它将是一个基于位置的文件。我们可以在Oracle控制文件中执行此操作,在该文件中,我们可以定义每个列的位置,并检索我在pyspark中执行此操作所需的值。 我正在使用Apache Spark来处理我的Pyspark或python代码。 对于Ex。 TXT文件中的两行

  • pyspark新手,希望将csv文件读取到数据帧。似乎不能让人读。有什么帮助吗? ()中的Py4JJavaError回溯(最近一次调用)----

  • 我目前正在使用Apache Zeppelin 0.8。我尝试加载如下csv文件: 我也尝试过这个: 但是,它无法打印出以下内容: 组织。阿帕奇。火花SparkException:作业因阶段失败而中止:阶段2.0中的任务0失败1次,最近的失败:阶段2.0中的任务0.0丢失(TID 2,localhost,executor driver):java。lang.NoSuchMethodError:org

  • 问题内容: 如何使用PySpark读取以下JSON结构以触发数据帧? 我的JSON结构 我已经尝试过: 我希望将输出a,b,c作为列,并将值作为相应的行。 谢谢。 问题答案: Json字符串变量 如果您将 json字符串作为变量, 则可以 这会给你 Json字符串作为文件中的单独行(sparkContext和sqlContext) 如果 文件中 有 json字符串作为单独的行, 则可以 使用spa