Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark数据帧列命名约定/限制_Apache Spark_Hive_Pyspark_Naming Conventions_Amazon Athena - Fatal编程技术网

Apache spark Spark数据帧列命名约定/限制

Apache spark Spark数据帧列命名约定/限制,apache-spark,hive,pyspark,naming-conventions,amazon-athena,Apache Spark,Hive,Pyspark,Naming Conventions,Amazon Athena,我已经多次遇到我的(Py)Spark列名的默认命名(从收到的.csv文件导入)问题。似乎会弄乱Spark的东西是混合情况和类似的东西。或-在列名中。因此,我决定找出实际保存的列名,并发现以下内容: 似乎建议只使用小写字母的名称: 配置单元在配置单元元存储中以小写形式存储表和字段名。 Spark在数据框、拼花文件中保留字段名的大小写。 当使用Spark SQL创建/访问表时,Spark将细节存储在表属性中(在配置单元元存储中),从而保持区分大小写的能力。当使用Hive Metastore通过Spa

我已经多次遇到我的(Py)Spark列名的默认命名(从收到的.csv文件导入)问题。似乎会弄乱Spark的东西是混合情况和类似的东西。或-在列名中。因此,我决定找出实际保存的列名,并发现以下内容:

似乎建议只使用小写字母的名称:

配置单元在配置单元元存储中以小写形式存储表和字段名。 Spark在数据框、拼花文件中保留字段名的大小写。 当使用Spark SQL创建/访问表时,Spark将细节存储在表属性中(在配置单元元存储中),从而保持区分大小写的能力。当使用Hive Metastore通过Spark SQL访问拼花地板记录时,这会导致一种奇怪的行为

似乎证实了这一点,并补充说“\u1”是唯一的保存特殊字符:

。。。但是Spark需要小写的表名和列名

Athena表、视图、数据库和列名不能包含特殊的 字符,下划线(\u1)除外

我从中得出的结论是,如果可能的话,我应该尽量只使用小写的列名,并在单词之间使用uu作为分隔符,以确保与Spark工作流中可能出现的工具的最大交叉兼容性。这是否正确?是否有理由在下划线上选择一个空格,还有什么要考虑的吗?
<>我意识到,在很多情况下,当重命名所有的列到上面的模式时,我可能会做得太过火了。但是,我宁愿避免在项目中间命名相关的问题,因为我发现这些错误有时很难调试。

< P>当将文件保存到拼花格式时,不能使用空格和一些特定的字符。我在读CSV和写拼花地板时遇到了类似的问题。下面的代码为我解决了这个问题:

# Column headers: lower case + remove spaces and the following characters: ,;{}()=  
newColumns = []
problematic_chars = ',;{}()='
for column in df.columns:
    column = column.lower()
    column = column.replace(' ', '_')
    for c in problematic_chars:
        column = column.replace(c, '')
    newColumns.append(column)
df = df.toDF(*newColumns)

是的,如果你的目标是确保最大的交叉兼容性,你应该确保你的列名都是小写的,只有uu作为分隔符。

这可能是一个合理的建议,但我认为这不是必需的。你有没有试着引用那些有问题的名称,例如
`怪异的col Name`
?但请注意,这对始终被解释为嵌套字段分隔符的点不起作用