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 没有任何问题,你必须包括你遇到的具体错误。
在 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 没有任何问题,你必须包括你遇到的具体错误。