繁体   English   中英

如何使用pyspark从CSV格式的Spark中设置正确的数据类型

How to set the right Data Type in parquet with Spark from a CSV with pyspark

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个csv文件,看起来像:

39813458,13451345,14513,SomeText,344564,Some other text,328984,"[{""field_int_one"":""16784832510"",""second_int_field"":""84017"",""third_int_field"":""245"",""some_timestamp_one"":""2018-04-17T23:54:34.000Z"",""some_other_timestamp"":""2018-03-03T15:34:04.000Z"",""one_more_int_field"":0,},{""field_int_one"":""18447548326"",""second_int_field"":""04965"",""third_int_field"":""679"",""some_timestamp_one"":""2018-02-06T03:39:12.000Z"",""some_other_timestamp"":""2018-03-01T09:19:12.000Z"",""one_more_int_field"":0}]"

我将其转换为镶木地板

from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.types import *
from pyspark.sql.session import SparkSession
sc = SparkContext('local')
spark = SparkSession(sc)

if __name__ == "__main__":
    sqlContext = SQLContext(sc)

    schema = StructType([
              StructField("first_int", IntegerType(), True),
              StructField("second_int", IntegerType(), True),
              StructField("third_int", IntegerType(), True),
              StructField("first_string_field", StringType(), True),
              StructField("fourth_int", IntegerType(), True),
              StructField("second_string_field", StringType(), True),
              StructField("last_int_field", StringType(), True),
              StructField("json_field", StringType(), True)])

    rdd = spark.read.schema(schema).csv("source_file.csv")
    rdd.write.parquet('parquet_output')

它可以工作并进行转换,但是如果在查询后执行.printSchema ,则显然会将其定义打印为String。 我如何正确地将最后一个字段声明为Json?

1 个回复

我认为嵌套的ArrayType将适用于这种类型的架构

schema = StructType([
          StructField("first_int", IntegerType(), True),
          StructField("second_int", IntegerType(), True),
          StructField("third_int", IntegerType(), True),
          StructField("first_string_field", StringType(), True),
          StructField("fourth_int", IntegerType(), True),
          StructField("second_string_field", StringType(), True),
          StructField("last_int_field", StringType(), True),
          StructField("json_field", ArrayType(
                StructType() \
                   .add("field_int_one", IntegerType()) \
                   .add("field_string_one", StringType()) \
                   .addMoreFieldsHere), 
          True)])
1 使用正确的数据类型在 Pyspark 中读取 CSV

当我尝试使用 spark 导入本地 CSV 时,默认情况下每列都作为字符串读入。 但是,我的列仅包含整数和时间戳类型。 更具体地说,CSV 如下所示: 我找到了应该在这个问题中工作的代码,但是当我执行它时,所有条目都返回为NULL 。 我使用以下内容来创建自定义架构: 然后在 CSV 中读 ...

2 在Spark中验证CSV数据的数据类型的正确方法是什么?

我们有一个JSON文件作为spark程序的输入(描述了我们要在每列上检查的架构定义和约束),我想执行一些数据质量检查,例如(Not NULL,UNIQUE)和数据类型验证(想检查csv文件是否包含根据json模式的数据?)。 JSON档案: { “ id”:“ 1”, “ ...

4 Spark将csv列中的空值视为null数据类型

我的spark应用程序读取csv文件,使用sql将其转换为不同的格式,并将结果数据帧写入不同的csv文件。 例如,我输入csv如下: 我的转变是: (我无法回答为什么将null用作SecondaryLocationId,它是业务用例)现在spark无法找出Secondary ...

5 使用数据类型映射将数据帧写入csv 在Spark中

我有一个文件为file1snappy.parquet。 它具有一个复杂的数据结构,如映射,内部数组。经过处理后,我得到了最终结果。将结果写入CSV时,我得到了一些错误提示 我使用的代码: 我尝试转换datadf.toString(),但仍然遇到相同的问题。 如何将结果写入CS ...

7 Spark中的数据类型不正确

当我在spark中创建数据框时,列的类型错误。 我有100列,不知道如何最好地更改每列的数据类型。 幸运的是,大多数应该是数字。 这是我的工作: 这些列应该是数字列,但是df只有字符串: ...

8 使用OpenAccess ORM Fluent API设置正确的数据类型

我正在使用Telerik数据访问Fluent模型(开放访问)代码优先方法来生成数据库。 除某些问题外,一切都进行正确。 •我在代码中创建了一个属性为Decimal。 但是在数据库中,其数据类型是数字而不是十进制。 我需要将数据类型设置为十进制,但这给了我数值。 •代码中的Bool属性存 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM