当前位置: 首页 > 知识库问答 >
问题:

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

贺跃
2023-03-14

基于Spark-Load CSV文件作为数据文件?

val df = spark.sql("SELECT * FROM csv.`csv/file/path/in/hdfs`")

我知道可以使用spark.read.format(“csv”).option(“delimiter”,“”)来完成,但理想情况下我不必这样做。

更新信息

看来我得用反勾号通过这条路。

== 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'}

共有1个答案

后安民
2023-03-14

尽管不是一句台词,但以下内容可能对你有用:

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");

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

 类似资料:
  • 问题内容: 您可能会或可能不知道的ASCII分隔文本,其中有使用非键盘字符分离领域和线条的不错的优势。 写下来很简单: 而且,可以肯定的是,您可以正确地丢弃东西。但是,在阅读时,什么也没有做,并且如果我尝试这样做: 它抛出 那么,如何读取ASCII分隔文件?我会降级吗? 问题答案: 您可以通过有效地将文件中的行尾字符转换为换行字符进行硬编码来识别: 输出:

  • 问题内容: 我正在尝试读取以下形式的大文本文件: 我想在文本文件中将此字符串作为一个大的Java字符串读取。这可能吗?我知道使用split方法。 它可以逐行读取它,但我真正需要的是在“ +”号处分割此长文本字符串。之后,我想将其存储为数组,arraylist,列表,… 谁能帮我这个?因为互联网上的所有信息都只是逐行读取文件。提前致谢! 问题答案: 您可以使用或任何IO类读取文件。假设文件中包含该字

  • 我有一个简单的Jenkinsfile,我想在其中从工作区加载一些数据。我正在使用管道插件来利用存储库中的Jenkinsfile。构建被外包给匹配的Jenkins代理。当我尝试使用“readFile”时,我收到以下消息: Java语言io。FileNotFoundException:/path/to/jenkins/workspace/XXXXX/project/data。json(无此类文件或目录

  • 我在使用Pandas读取选项卡分隔的文件时遇到问题。 所有单元格值都有双引号,但对于某些行,有一个额外的双引号打断了整个过程。例如: 我得到的错误是:错误标记数据。C错误:第8355行预期有31个字段,SAW58 我使用的代码是: 它适用于其余文件,但不适用于出现额外双引号的文件。

  • 我有一个逗号分隔的CSV文件(),其中逗号通过在引号中环绕数据来转义()。 我想通过使用记事本查找任何未包含在双引号()中的逗号,并将其替换为管道,将我的CSV转换为管道分隔文件()。 我的第一种方法是使用正则表达式匹配任何不带引号的逗号。但是,在记事本中搜索会同时替换未加引号的逗号和任何包含逗号的带引号的字符串。 如何使用记事本将逗号分隔的CSV文件()转换为管道分隔的文件()?

  • 问题内容: 我有一个文件,其中用分号“”分隔行。我想逐行阅读此文件,其中行应基于而不是换行符的存在。 一种方法是: 但是,如果我的文件太大,则内存使用效率不高。与其一起阅读整个文件,不如逐行阅读。 支持参数’newline’,但是此参数仅用作此处提到的输入。 有什么方法可以有效地读取文件行,但要基于预先指定的分隔符吗? 问题答案: 您可以使用生成器: