在scala(structtype)中使用spark dataframe处理csv文件中的空值

b5lpy0ml  于 2021-05-29  发布在  Hadoop
关注(0)|答案(0)|浏览(308)

我正在尝试将csv文件加载到具有我自己定义的模式的Dataframe中。我只需要在将坏数据作为Dataframe加载时识别它。
我认为坏数据是
当模式告诉integer时,输入包含字符串
意外/错误的分隔符
当我的模式显示nullable=>false时,任何列数据如下所示
无效的
''
//什么都没有
我正在使用一个额外的列“\u corrupt\u record”来重定向上述3种情况下的记录。
我可以看到这个额外的列在案例1)和案例2)中被填充,但是当数据为null(案例3.3)时,记录不会重定向到这个额外的列。它适用于3.1和3.2。
我哪里做错了?
在将原始文件加载到Dataframe时,您可以向我建议在实时项目中使用的任何其他方法来处理/重定向坏数据到文件中。
输入文件products.txt模式:产品(产品标识、产品名称、产品类型、产品版本、产品价格)
代码:

val spark= new sql.SparkSession.Builder().master("local[*]").getOrCreate()

val products_schema= StructType(List
  (
  StructField("product_id",IntegerType,false),
  StructField("product_name",StringType,false),
  StructField("product_type",StringType,true),
  StructField("product_version",StringType,true),
  StructField("product_price",StringType,true),
  StructField("_corrupt_record",StringType,true)
  )
)
val products_Staging_df=spark.read.option("header", false).option("delimiter", "|").schema(products_schema).csv("C:\\Users\\u6062310\\Desktop\\DBS\\Product.txt")

products_Staging_df.printSchema()
products_Staging_df.show()`

我放了一些坏记录,当我使用df.show()时,我希望product\u id=的记录也在\u corrupt\u record列下。但它不会来。
只有null和“”工作正常。如何处理空白?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题