小编Shi*_*gan的帖子

“Parquet 记录格式错误”,而列数不为 0

在 AWS EMR 集群上,我尝试使用 Pyspark 将查询结果写入 parquet,但遇到以下错误:

Caused by: java.lang.RuntimeException: Parquet record is malformed: empty fields are illegal, the field should be ommited completely instead
    at org.apache.hadoop.hive.ql.io.parquet.write.DataWritableWriter.write(DataWritableWriter.java:64)
    at org.apache.hadoop.hive.ql.io.parquet.write.DataWritableWriteSupport.write(DataWritableWriteSupport.java:59)
    at org.apache.hadoop.hive.ql.io.parquet.write.DataWritableWriteSupport.write(DataWritableWriteSupport.java:31)
    at parquet.hadoop.InternalParquetRecordWriter.write(InternalParquetRecordWriter.java:121)
    at parquet.hadoop.ParquetRecordWriter.write(ParquetRecordWriter.java:123)
    at parquet.hadoop.ParquetRecordWriter.write(ParquetRecordWriter.java:42)
    at org.apache.hadoop.hive.ql.io.parquet.write.ParquetRecordWriterWrapper.write(ParquetRecordWriterWrapper.java:111)
    at org.apache.hadoop.hive.ql.io.parquet.write.ParquetRecordWriterWrapper.write(ParquetRecordWriterWrapper.java:124)
    at org.apache.spark.sql.hive.execution.HiveOutputWriter.write(HiveFileFormat.scala:149)
    at org.apache.spark.sql.execution.datasources.SingleDirectoryDataWriter.write(FileFormatDataWriter.scala:137)
    at org.apache.spark.sql.execution.datasources.FileFormatWriter$$anonfun$org$apache$spark$sql$execution$datasources$FileFormatWriter$$executeTask$3.apply(FileFormatWriter.scala:245)
    at org.apache.spark.sql.execution.datasources.FileFormatWriter$$anonfun$org$apache$spark$sql$execution$datasources$FileFormatWriter$$executeTask$3.apply(FileFormatWriter.scala:242)
    at org.apache.spark.util.Utils$.tryWithSafeFinallyAndFailureCallbacks(Utils.scala:1394)
    at org.apache.spark.sql.execution.datasources.FileFormatWriter$.org$apache$spark$sql$execution$datasources$FileFormatWriter$$executeTask(FileFormatWriter.scala:248)
    ... 10 more
Run Code Online (Sandbox Code Playgroud)

我已经读到,如果某些列只有空值,则可能会发生这种情况,但在检查了所有列数后,情况并非如此。没有任何列是完全空的。我没有使用镶木地板,而是尝试将结果写入文本文件,一切都很顺利。

任何可能触发此错误的线索?以下是此表中使用的所有数据类型。共有 51 列。

'array<bigint>',
'array<char(50)>',
'array<smallint>',
'array<string>',
'array<varchar(100)>',
'array<varchar(50)>',
'bigint',
'char(16)',
'char(20)',
'char(4)',
'int',
'string',
'timestamp',
'varchar(255)',
'varchar(50)',
'varchar(87)'
Run Code Online (Sandbox Code Playgroud)

hive amazon-emr parquet pyspark

4
推荐指数
1
解决办法
3372
查看次数

嵌入式系统的时间戳

我想在嵌入式系统上添加时间戳到传感器测量值(运行ArchLinux的Raspberry Pi A +).我发现timetime.h,但它给了我"第二"的决议,我至少需要"毫秒".系统会运行几个小时,我不担心长时间的漂移.

我怎么能在C++中得到它?

c++ timestamp

1
推荐指数
1
解决办法
965
查看次数

与 Levenshtein 距离的模糊连接

我有一个包含用户名(约 1 000 行)的表,称为“潜在用户”,另一个表称为“实际用户”(约 1000 万行)。所有记录都完全由 [az] 字符组成,没有空格。此外,我知道实际用户表中没有潜在用户。

我希望能够根据 Levenshtein 距离,计算 possible_users 中的每一行,actual_users 中最接近的记录是什么。例如:

| potential_users|
|----------------|
| user1          |
| kajd           |
| bbbbb          |
Run Code Online (Sandbox Code Playgroud)

| actual_users |
|--------------|
| kaj          |
| bbbbbbb      |
| user         |
Run Code Online (Sandbox Code Playgroud)

将返回:

| potential_users | actual_users | levenshtein_distance |
|-----------------|--------------|----------------------|
| user1           | user         | 1                    |
| kajd            | kaj          | 1                    |
| bbbbb           | bbbbbbb      | 2                    |
Run Code Online (Sandbox Code Playgroud)

如果表很短,我可以创建一个交叉联接,计算潜在用户中的每条记录与实际用户中的编辑距离,然后返回具有最低值的记录。然而,在我的例子中,这将创建一个 1 000 x 10 000 000 行的中间表,这有点不切实际。

是否有更干净的方法通过创建交叉连接来执行此类操作?

sql hive presto apache-spark-sql trino

0
推荐指数
1
解决办法
2063
查看次数

标签 统计

hive ×2

amazon-emr ×1

apache-spark-sql ×1

c++ ×1

parquet ×1

presto ×1

pyspark ×1

sql ×1

timestamp ×1

trino ×1