主要目标
显示或选择从 parquet 文件读取的 Spark 数据帧中的列。论坛中提到的所有解决方案在我们的案例中均不成功。
问题
当使用 SPARK 读取和查询 parquet 文件时,会出现此问题,原因是 ,;{}()\n\t=列名称中存在特殊字符。使用具有两列和五行的简单镶木地板文件重现了该问题。列的名称是:
SpeedReference_Final_01 (RifVel_G0)SpeedReference_Final_02 (RifVel_G1)出现的错误是:
Attribute name "SpeedReference_Final_01 (RifVel_G0)" contains invalid character(s) among " ,;{}()\n\t=". Please use alias to rename it.
我们使用Python语言的PySpark,实验的解决方案可以分类如下:
基于列重命名的解决方案- [ spark.read.parquet+获得的数据框的重命名]
已经试验了几种解决方案:
withColumnRenamed(脚本中的问题 N.2)toDF(第 N.3 期)alias(第 N.5 期)在我们的例子中,它们都不起作用。
将 parquet 文件读入 Pandas 数据帧,然后从中创建一个新文件- [ pd.read.parquet+ spark.createDataFrame]
此解决方案正在使用一个小型 parquet 文件(问题 N.0,即脚本内的解决方案):创建的 Spark 数据帧甚至可以成功查询如果它的列名包含特殊字符。不幸的是,对于我们的大镶木地板文件(每个镶木地板 600000 行 x 1000 列)来说这是不切实际的,因为创建 …