在HDFS上,我的目录是这样的
hdfs://主机名/ data / feed / data / dt = 20180909 / hour = 04 / uk / customer1'
在我的脚本中,我从文件中提取了所有信息,但是我还需要捕获输出数据框中的位置。此文件存储的唯一位置是在目录路径中(例如,上面= uk)
有没有办法将其提取出来以在新列中构成df输出的一部分?
ALSO,
我的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"))\
谢谢!
答案 0 :(得分:0)
使用wholeTextFiles
api可以轻松解决问题的第一部分,该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不会有任何问题,您必须包含要获取的特定错误。