请注意:
我问了一个
similar question
昨天,但现在有了新的(进化的)需求,我在这里提出这个问题,作为我在Databricks/Spark中遇到的类似(但新的)问题的迭代。
我有一堆文本文件(所有扩展名都是“.flib”)位于Azure存储容器上。我正试图将这些文件读取到Azure Databricks表中,该表有两列:(1)
FileName
其包含从容器中读取的FLIP文件的名称,以及(2)
FileData
其包含每个FLIB文件的所有文本。
到目前为止,我的最佳尝试是:
%sql
USE CATALOG "data-beta";
USE data_beta_dev;
DROP TABLE IF EXISTS data_beta;
CREATE TABLE data_beta
USING delta
AS
SELECT
REVERSE(SUBSTRING_INDEX(REVERSE(_metadata.file_path), '/', 1)) as SouceFileName,
value AS File_Data
FROM read_files("wasbs://<redacted>@<redacted>.blob.core.windows.net/some/path/to/flibs/*.flib", format => 'text');
select * from data_beta;
虽然这是有效的,但它会产生不希望的结果,即每个FLIB文件的每一行都被放入
data_beta
桌子
因此,如果有一个名为
hello.flib
在该容器上,并且该文件中包含150行文本,则上面的代码将在
数据贝塔
桌子每一行都有一个
FileName
“hello.flib”的值,但将具有
文件数据
该FLIB文件中不同文本行的值。
相反,我希望每个文件有1行。所以如果
你好.flib
包含150行,我仍然只得到该文件的1行,其中有一个巨大的数据块
文件数据
值(全部150行文本)。
有人能看到我是如何做到这一点的吗?