【问题标题】:Need to replace control characters in a parquet file which is stored in hdfs需要替换存储在 hdfs 中的 parquet 文件中的控制字符
【发布时间】:2017-12-01 20:44:47
【问题描述】:

我正在将数据从 MySQL 作为 parquet 文件导入 hdfs 并在其上构建一个 hive 外部表,但该文件中几乎没有不需要的控制字符也被加载到 hive 表中。我需要用空字符串替换那些。我试过猪,但没有运气。以下是返回问题的火花代码。

PYSPARK 代码:

sc = spark.sparkContext
# using SQLContext to read parquet file
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
# to read parquet file
df = sqlContext.read.parquet('path-to-file/file.parquet')
df1= df.replace(['\xa0'],[''])
df1.write.parquet('path-to-file/replaced_files')

问题:

UnicodeDecodeError utf8 编解码器无法确定位置 0 中的字节 0xa0:无效起始字节

请建议我如何解决这个火花问题,并让我知道我们是否可以使用 PIG 或任何其他方式处理这些控制字符。

提前致谢。

【问题讨论】:

  • 如何将数据传输到 HDFS。你在使用 SQOOP 吗?如果是这样,您可以考虑在 SQOOP 脚本中替换这些?
  • 是的!我正在通过 sqoop 导入数据。我们如何在 sqoop 脚本中替换?

标签: apache-spark hive apache-pig parquet


【解决方案1】:

如果您使用的是 SQOOP,请在导入命令中使用 --query 选项并使用下面的替换语句替换 xa0,根据 unicode 字符集,它是一个 char(160)

replace(input_string, char(160), ' ')

【讨论】:

  • 我正在导入所有列,但我不确定列数及其名称。那么我该如何实现呢?
  • 您是说您不知道您要导入的数据的结构吗?这有点令人担忧。您是否尝试过导入为文本文件并尝试过您的 pyspark 脚本。如果可行,您可以将镶木地板应用于转换后的数据吗?
猜你喜欢
  • 2017-01-07
  • 2014-10-07
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多