Python Databricks上的PySpark获取绝对URI中的相对路径:尝试读取带有日期戳的Json文件时

Python Databricks上的PySpark获取绝对URI中的相对路径:尝试读取带有日期戳的Json文件时,python,apache-spark,hadoop,pyspark,hdfs,Python,Apache Spark,Hadoop,Pyspark,Hdfs,我试图将JSON文件目录中的数据读取到DataRicks中的spark数据帧,每当我使用通配符(“*”)或启用多行时,都会出现以下错误: IllegalArgumentException: 'java.net.URISyntaxException: Relative path in absolute URI: 2017-08-17T06:01:02Z-077d951a-3848-422b-9a4c-a3b648dde0ac.json' 尝试使用通配符时首次遇到此问题: t= 'mnt/dat

我试图将JSON文件目录中的数据读取到DataRicks中的spark数据帧,每当我使用通配符(“*”)或启用多行时,都会出现以下错误:

IllegalArgumentException: 'java.net.URISyntaxException: Relative path in 
absolute URI: 2017-08-17T06:01:02Z-077d951a-3848-422b-9a4c-a3b648dde0ac.json'
尝试使用通配符时首次遇到此问题:

t= 'mnt/data/2017-08-17/06/*.json'
rdf = spark.read.load(t, 'json')
得到了上面的错误。发现这很奇怪,因为当我直接指定文件路径时:

'dbfs:/mnt/data/2017-08-17/06/2017-08-17T06:01:02Z-077d951a-3848-422b-9a4c-a3b648dde0ac.json'
因此,我实施了以下修复:

rpaths = list(dbutils.fs.ls("mnt/data/2017-08-17/06/"))
rdf = spark.read.load(rpaths[0].path, 'json')

for i in range(1, len(rpaths)):
  temp = spark.read.load(rpaths[i].path, 'json')
  rdf = rdf.union(temp)
在我尝试启用多行json之前,它运行良好:

rpaths = list(dbutils.fs.ls("mnt/data/2017-08-17/06/"))
rdf = spark.read.load(rpaths[0].path, 'json', multiline = 'true')

for i in range(1, len(rpaths)):
  temp = spark.read.load(rpaths[i].path, 'json')
  rdf = rdf.union(temp)
得到了与上面相同的错误

尝试URLEncode,因为我假设它与文件名中的“:”字符有关,但是它仍然会给我相同的错误

from urllib.parse import urlparse
rpaths = list(dbutils.fs.ls("mnt/data/2017-08-17/06/"))
rdf = spark.read.load(urlparse(rpaths[0].path).path, 'json', multiline = True)
知道为什么会发生这种情况/我将如何解决

编辑

我已经广泛地查看了他们的文档,并确认我提供了一个绝对路径,但是它没有说明“:”不受支持

t= '/mnt/data/2017-08-17/06/*.json' 
rdf = spark.read.load(t, 'json', multiline = True) 
仍然给出了同样的问题。使用DButils时的路径解析为:

 'dbfs:/mnt/data/2017-08-17/06/2017-08-17T06:01:02Z-077d951a-3848-422b-9a4c-a3b648dde0ac.json'
这是一个绝对文件路径

我认为这可能与冒号(“:”)字符有关。看起来“:”在URI中有一个特殊的含义,这就是HDFS所使用的。我试图逃离角色(%3A),但它说不存在这样的路径


有什么想法吗?

因为您的文件路径不是以
/
开头的,它是相对的,但是
dbutils
需要一个绝对的文件路径。我很惊讶它能与相对文件路径一起工作

查看他们的(优秀)文档


感谢@Steven的回复,我不确定这是否是问题所在:
t='/mnt/data/2017-08-17/06/*.json'rdf=spark.read.load(t'json',multiline=True)
仍然给出了同样的问题。使用DButils时的路径解析为:
“'dbfs:/mnt/data/2017-08-17/06/2017-08-17T06:01:02Z-077d951a-3848-422b-9a4c-a3b648dde0ac.json'”
,这是一个绝对的文件路径。使用它们的文档,它似乎适用于除其中带有“:”的文件之外的所有其他文件。