Spark DataFrame-使用SQL读取管道分隔文件?

use*_*304 5 scala apache-spark apache-spark-sql spark-dataframe

基于Spark-将CSV文件加载为DataFrame吗?

是否可以使用SQL指定选项来设置定界符,空字符和引号?

val df = spark.sql("SELECT * FROM csv.`csv/file/path/in/hdfs`")
Run Code Online (Sandbox Code Playgroud)

我知道可以使用完成此操作spark.read.format("csv").option("delimiter", "|"),但理想情况下我不必这样做。

更新信息

看来我必须使用反引号通过路径。

当我试图通过时 OPTIONS

== SQL ==
SELECT * FROM 
csv.`csv/file/path/in/hdfs` OPTIONS (delimiter , "|" )
-----------------------------------^^^

Error in query:
mismatched input '(' expecting {<EOF>, ',', 'WHERE', 'GROUP', 'ORDER', 
'HAVING', 'LIMIT', 'JOIN', 'CROSS', 'INNER', 'LEFT', 'RIGHT', 'FULL', 
'NATURAL', 'LATERAL', 'WINDOW', 'UNION', 'EXCEPT', 'MINUS', 
'INTERSECT', 'SORT', 'CLUSTER', 'DISTRIBUTE', 'ANTI'}
Run Code Online (Sandbox Code Playgroud)

vat*_*ada 2

虽然不是一行灵魂,但以下内容可能对您有用:

spark.sql("CREATE TABLE some_table USING com.databricks.spark.csv OPTIONS (path \"csv/file/path/in/hdfs\", delimeter \"|\")");
val df = spark.sql("SELECT * FROM some_table");
Run Code Online (Sandbox Code Playgroud)

当然,如果你想直接在 .dataframe 上执行一些 SQL 操作,你可以跳过加载到 dataframe 的第二步some_table