PySpark - 在 DF 中打印为列的目录

PySpark - Directory printed as column in DF

在 HDFS 上,我有这样的目录

hdfs://hostname/data/feed/data/dt=20180909/小时=04/uk/customer1'

在我的脚本中,我已经从文件中提取了所有信息,但我还需要捕获输出数据框中的位置。唯一存储的地方是目录路径(例如上面= uk)

有没有办法提取它以形成新列中 df 输出的一部分?

此外,

我的 Pyspark 代码中有以下语句。

问题是,当我喜欢 ("%i...) 它认为它正在寻找一个整数变量 - 同样的问题适用于 %g

我试过用 \ 转义字符,但那不起作用。

如果我将所有单词都改为以 'b' 开头,问题就不存在了。所以归结为这个问题。

有谁知道我怎样才能避免这个问题?

    .withColumn('cleanapn',\
    sqlfunc.when(df4.apnstr.like("%info%"), "Info")\
    .when(df4.apnstr.like("%books%"), "Books")\
    .when(df4.apnstr.like("%interest%"), "Interest")\
    .when(df4.apnstr.like("%gonefishing%"), "Gonefishing")\
    .otherwise("Other"))\

谢谢!

问题的第一部分可以通过使用 wholeTextFiles api 轻松解决,它给出了(文件名,文件内容)的元组,您可以使用它来提取位置信息。

例如:

rdd1 = sc.wholeTextFiles("/data/feed/data/dt=20180909/hour=04/uk/customer1/") 

会给你 rdd1 作为 -

("/data/feed/data/dt=20180909/hour=04/uk/customer1/file1.txt","<data-in-file1.txt>")
("/data/feed/data/dt=20180909/hour=04/uk/customer1/file2.txt","<data-in-file2.txt>")

你可以操纵它来获取 DataFrame[location: string, data: string] 的数据帧,如 -

df = rdd1 \
       .map(lambda x : (x[0].split("/")[-2],x[1]))\
       .toDF(['location','data'])

这应该理想地给,

('uk',"<data-in-file1.txt>")
('uk',""<data-in-file2.txt>")

关于你的第二个问题,我认为使用 %i 或 %g 没有任何问题,你必须包括你遇到的具体错误。