在構建包含 CSV 檔案的某些資料集的下游時,我看到如下錯誤:
引起:java.lang.IllegalStateException: Header 指定 185 列型別,但行拆分為 174:"SUSPECT STRING","123...
或者
原因:java.lang.RuntimeException:編碼時出錯:java.lang.RuntimeException:將“SUSPECT STRING”決議為“COLOUR_ID”列的 IntegerType$ 時出現例外:無法使用 com.palantir.spark.parsers.text 反序列化值。轉換器。整數轉換器。被反序列化的值為:SUSPECT STRING
查看錯誤,在我看來,我的一些 CSV 檔案的架構錯誤。我怎樣才能找到哪些?
uj5u.com熱心網友回復:
您可以使用的一種技術是:
- 創建一個轉換來讀取 CSV 檔案,就好像它們是非結構化文本檔案一樣,然后
- 將生成的 DataFrame 過濾到僅可疑行,如錯誤訊息中包含的提取所標識的那樣
以下是此類轉換的示例:
from pyspark.sql import functions as F
from transforms.api import transform, Input, Output
from transforms.verbs.dataframes import union_many
def read_files(spark_session, paths):
parsed_dfs = []
for file_name in paths:
parsed_df = (
spark_session.read.text(file_name)
.filter(F.col("value").contains(F.lit("SUSPECT STRING")))
.withColumn("_filename", F.lit(file_name))
)
parsed_dfs = [parsed_df]
output_df = union_many(*parsed_dfs, how="wide")
return output_df
@transform(
output_dataset=Output("my_output"),
input_dataset=Input("my_input"),
)
def compute(ctx, input_dataset, output_dataset):
session = ctx.spark_session
input_filesystem = input_dataset.filesystem()
hadoop_path = input_filesystem.hadoop_path
files = [hadoop_path "/" file_name.path for file_name in input_filesystem.ls()]
output_df = read_files(session, files)
output_dataset.write_dataframe(output_df)
然后,這將輸出感興趣的行以及它們所在檔案的路徑。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/494962.html
標籤:CSV palantir铸造厂
上一篇:在讀取存盤在ADLS中的CSV時,發現Azure資料工廠中的列數超過了預期的列數
下一篇:如何在Python中提供列標題
