json - 无法将数据放入 pyspark 中的所需架构
问题描述
我有 pyspark 数据框,如下所示
>>> df.show(1, False)
{"data":{"probability":0.2345,"customerId":1234567,"region":"BR"},"uploadedDate":1542548806295}
以上是我不传递任何模式作为输入时的输出...
我正在尝试以下脚本来加载带有提到的架构的数据。
SCHEMA = StructType([ StructField('probabilityMale',LongType(),True),\
StructField('customerId',LongType(),True),\
StructField('region',StringType(),True),\
StructField('uploadedDate',StringType(),True)])
df = spark.read.format('csv').\
option('header','false').\
option('delimiter','\t').\
schema(SCHEMA).\
load(path)
但这并没有在单独的列中给出所有数据点。我也试过了inferSchema
。
df = spark.read.format('csv').\
option('header','false').\
option('delimiter','\t').\
option("inferSchema", "true").\
load(path)
但是得到与前面提到的相同的输出......
我如何提及架构并在每列中有数据?
解决方案
您有一个 JSON 输入,您应该使用 JSON 阅读器而不是 CSV 阅读器来阅读:
df = spark.read.json(path)
要单独获取列,您可以扩展 struct data
:
df2 = df.select('data.*', 'uploadedDate')
推荐阅读
- apache-spark - 由于错误的 java 版本,无法在 apache spark 中启动 worker
- java - Java:程序不计算数组列表中元素的出现次数
- symfony - 从 Twig (symfony 5) 调用 JavaScript 函数
- java - 服务器重新启动后 Jax-rs Sse 客户端重新连接
- css - 如何改变 UI 语义的高度
- swift - PlantNet API 的 Swift https POST 请求
- docker - 动态设置 JAVA_HOME 并将证书导入 cacerts 传递 JAVA_HOME 作为路径
- windows - Intellij 多次启动 gradle 并最终失败
- python - 重写 R 的密度()(不是真的)
- sql - 对于 10 亿行,Postgres 查询非常慢