我遇到了一个问题,使用PySpark从使用API收集的数据到Databricks中创建数据帧。
我能够使用API连接,并使用我收集的请求库:
def gather_data():
url = www.data.com
response = requests.get(URL)
if response.status_code == 200:
return response.json()
else:
print("error")
gather_data()
这样做,我能够看到我的数据作为一个json文件,虽然当尝试使用如下函数读取:
data = gather_data()
df = spark.read.option("multiline","true").json(data)
我得到错误代码:java.lang。ArrayStoreException: java.util.HashMap
数据如下:
[72]:[{"名称":"约翰尼","id_number":12,'birthday': '2023-04-03 08:00:00.0'},{"的名字:"大卫","id_number":56岁'birthday': 2023-04-03 08:00:01 '}]
当我使用:
时也会发生同样的情况- type(gather_data())
- df = spark.read.json(data)
- df = spark.createDataFrame([Row(**i) for I in data])
起初我以为我错过了多行,但事实并非如此。
通常在处理csv文件时,我可以直接将其读入数据帧,但这里不是这样。
通过论坛,我看到response.json()方法返回的似乎是一个字典类型,虽然我不能确认这一点,因为类型方法不会完成它。
我已经看了很多答案,但似乎还没有找到一个合适的。
我见过其他方法定义模式及其类型,但我使用许多日期时间戳,并希望保存数据,并且不确定如何使用非常大的数据集完成此任务。
问题出现了,因为你没有返回JSON作为文本,但你使用的response.json()
函数返回JSON的解析表示。
您有以下选择:
- 使用
createDataFrame
: 从你解析的对象创建一个数据帧
data = gather_data()
df = spark.createDataFrame([data])
- 不解析数据,并使用
spark.read.json
,但您需要在gather_data
函数中用response.text
替换response.json()
:
data = gather_data()
df = spark.read.json(sc.parallelize([data]))